java - Joda Time 不能减去一小时

标签 java android date jodatime

在我的 Android 程序中,我有一个微调器,允许用户选择不同的时间。每个选择都会用 Joda 时间进行处理以减去分钟。它在 0 到 59 分钟和 61 分钟及更长时间内工作正常。但是,减去 60 分钟后,时间不会更新,而是显示原始时间。

如何让 Joda 时间减去 60 分钟?

旋转器:

public class MyOnItemSelectedListener implements OnItemSelectedListener {



            public void onItemSelected(AdapterView<?> parent, View view, int pos,
                    long id1) {


                    String mins =     parent.getItemAtPosition(pos).toString();

                    int intmins=0;

                    // process user's selection of alert time
                    if(mins.equals("5 minutes")){intmins = 5;}
                    if(mins.equals("10 minutes")){intmins = 10;}
                    if(mins.equals("20 minutes")){intmins = 20;}
                    if(mins.equals("30 minutes")){intmins = 30;}
                    if(mins.equals("40 minutes")){intmins = 40;}
                    if(mins.equals("50 minutes")){intmins = 50;}
                      if(mins.equals("60 minutes")){intmins = 60;}
                        if(mins.equals("120 minutes")){intmins = 120;}

                    String stringMinutes=""+intmins;
                    setAlarm(intmins, stringMinutes);



                } else {



            }

            public void onNothingSelected(AdapterView parent) {
                mLocationDisplay.setText(" " + location);
            }
        }




            public void setAlarm(int intmins, String mins) {
                // based alarm time on start time of event. TODO get info from database.

                String currentDate;
                SimpleDateFormat myFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
                Date date1 = null;
                DateTime dt;
                currentDate = eventdate + " " + startTimeMilitary;// startTimeMilitary;

            try {
                    date1 = myFormat.parse(currentDate);


                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                dt = new DateTime(date1);
                long dateInMillis = dt.getMillis();
                String sDateInMillis = Long.toString(dateInMillis);

                // subtract the selected time from the event's start time

                String   newAlertTime = subtractTime(dt, intmins);

                 newAlertTime = subtractTime(dt, intmins);
//......}



public String subtractTime(DateTime dt, int minusTime) {

                DateTime greaterDate;


                     greaterDate = dt.minusMinutes(minusTime);



                // newAlertTime is in UTC format
                String newAlertTime = greaterDate.toString();

                long alertInMillis = greaterDate.getMillis();
                String sAlertInMillis = Long.toString(alertInMillis);
                // ////new alert time is a stirng

                setStringAlertInMillis(sAlertInMillis);

                return newAlertTime;

            }

最佳答案

1) 删除硬编码。
使用

final String mins = parent.getItemAtPosition(pos).toString();
final Pattern minutes = Pattern.compile("([0-9]+) minutes"); 
final Matcher m = minutes.matcher(mins);
String stringMinutes = "0";
if (mins.matches())
{
   stringMinutes = m.group(1);
}  
setAlarm(Integer.parseInt(stringMinutes), stringMinutes);  

而不是你的硬编码

String mins = parent.getItemAtPosition(pos).toString();  
// your hardcode is here  
setAlarm(Integer.parseInt(stringMinutes), stringMinutes);  

2) 使用 DateTimeFormatter 代替 SimpleDateFormatter
您使用 SimpleDateFormatter 获取 java Date 并按此日期创建 DateTime

DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");  
dt = formatter.parseDateTime(currentDate);  

3) Joda 效果很好
在这段代码中,Joda 没有问题。

String subtractTime(DateTime dt, int minusTime)  

应该可以很好地工作。
调试你的代码,问题出现在

之前
if(mins.equals("5 minutes")){intmins = 5;}
if(mins.equals("10 minutes")){intmins = 10;}  
//...

关于java - Joda Time 不能减去一小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12568275/

相关文章:

java - 为什么使用 String.intern() 与在 Java 中传递 String 对象会得到不同的结果?

java - 数字的 double

android-opencv cvCanny链接错误

android - 错误 : Final local variable score cannot be assigned, 因为它是在封闭类型中定义的?

android - 使用 NETWORK_SETTINGS 权限防止 Android 9 (Pie) 上的 wifi 扫描节流

python - 在 Python 中,如何将这种格式转换为 unix 时间戳?

java - Spring安全角色和权限

java - Jackson OffsetDateTime 序列化 Z 而不是 +00 :00 timezone?

javascript - 返回倒数计时器的下一个本地化日期

java - HttpServletRequest 的属性字段如何映射到原始 HTTP 请求?