2012-09-24 63 views
0

在我的android程序中,我有一个微调允许用户选择不同的时间。每个选择都用乔达时间处理以减去分钟。它工作正常分钟0至59和61和更大。但是,当减去60分钟时,时间不会更新,并显示原始时间。乔达时间不能减1小时

我如何获得乔达时间减去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; 

      } 

回答

2

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)乔达效果很好
在这个代码没有问题乔达。

String subtractTime(DateTime dt, int minusTime) 

应该很好。
调试你的代码,问题之前是

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