как получить разницу между временем в виде строки - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь получить разницу между временем в виде строки, но я получаю, что разница всегда равна 0, я работаю над ежевикой.

            long startTime = HttpDateParser.parse("01:00:00");
            System.out.println("start time is :" + startTime);
            long endTime = HttpDateParser.parse("02:00:00");
            System.out.println("end time is :" + endTime);
            long diff = endTime - startTime;
            long diffHours = diff / (60 * 60 * 1000);

Ответы [ 3 ]

1 голос
/ 27 марта 2012

Если вы хотите вычислить только время между двумя в один и тот же день , которые отформатированы как "ЧЧ: ММ: СС", тогда это довольно просто

Используйте простой HttpDateParser и возьмителюбая дата, имеющая правильный формат

, например, «Вт, 27 марта 2012 09:11:37 GMT»

здесь мы заменим только время, тогда вы получите время в миллисекундах от двух до

String common="Tue, 27 Mar 2012 "; //09:11:37 GMT
            String time1="1:50:10";
            String time2="3:30:20";
             long startTime = HttpDateParser.parse(common+time1+" GMT");
             System.out.println("start time is :" + startTime);
             long endTime =  HttpDateParser.parse(common+time2+" GMT");
             System.out.println("end time is :" + endTime);
             long diff = endTime - startTime;
            long hours=diff/(60*60*1000);
         long minutes=(diff%(60*60*1000))/(60*1000);

         long sec=((diff%(60*60*1000))%(60*1000))/1000;
         String formateddate="";
         if(hours<10)
         {
             formateddate="0"+hours;
         }else{
             formateddate=""+hours;
         }
         if(minutes<10)
         {
             formateddate=formateddate+":0"+minutes;
         }else{
             formateddate=formateddate+":"+minutes;
         }
         if(sec<10)
         {
             formateddate=formateddate+":0"+sec;
         }else{
             formateddate=formateddate+":"+sec;
         }


         System.out.println("Difference in Houres:"+formateddate);

Я получил вывод в виде

[0.0] start time is :1332813010000
[0.0] end time is :1332819020000
[0.0] Difference in Houres:01:40:10

Примечание: если вы хотите рассчитать между двумя разными днями Здесь вам нужно передать формат даты, который должен быть соответствующим, как в примере: "ГГГГ-мм-dd чч: мм: сс "

здесь я приведу пример для примера

import java.util.Calendar;

import net.rim.device.api.i18n.SimpleDateFormat;
import net.rim.device.api.io.http.HttpDateParser;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.picker.DateTimePicker;

public final class Screen1 extends MainScreen implements FieldChangeListener
{
    /**
     * Creates a new MyScreen object
     */
    ButtonField date1;
    ButtonField date2;
    ButtonField button;
    LabelField lbl;
    DateTimePicker picker;
    String str="";
    Calendar cal;   

    public Screen1()
    {   

        date1=new ButtonField("date1");
        date1.setChangeListener(this);
        add(date1);

        date2=new ButtonField("date2");
        date2.setChangeListener(this);
        add(date2);

        button = new ButtonField("Screen 1 ");
        button.setChangeListener(this);
        add(button);
        lbl=new LabelField();
        add(lbl);
    }
    public void fieldChanged(Field field, int context) {
        if(field==button){//Tue, 27 Mar 2012 09:11:37 GMT

            System.out.println(date1.getLabel().toString()+"   "+date2.getLabel().toString());
             long startTime = HttpDateParser.parse(date1.getLabel().toString());
             System.out.println("start time is :" + startTime);
             long endTime =  HttpDateParser.parse(date2.getLabel().toString());
             System.out.println("end time is :" + endTime);
             long diff = endTime - startTime;

             long hours=diff/(60*60*1000);
         long minutes=(diff%(60*60*1000))/(60*1000);

         long sec=((diff%(60*60*1000))%(60*1000))/1000;
         String formateddate="";
         if(hours<10)
         {
             formateddate="0"+hours;
         }else{
             formateddate=""+hours;
         }
         if(minutes<10)
         {
             formateddate=formateddate+":0"+minutes;
         }else{
             formateddate=formateddate+":"+minutes;
         }
         if(sec<10)
         {
             formateddate=formateddate+":0"+sec;
         }else{
             formateddate=formateddate+":"+sec;
         }


         System.out.println("Difference in Houres:"+formateddate);
         lbl.setText("Time Between above dates is :"+formateddate);
        }else if(field==date1)
        {
            date1.setLabel(getDateTimeFromPicker().toString());                                 

        }else if(field==date2)
        {
            date2.setLabel(getDateTimeFromPicker().toString());
        }

    }
    private String getDateTimeFromPicker()
    {
        picker = DateTimePicker.createInstance( Calendar.getInstance(), "yyyy-MM-dd", "HH:mm:ss");
        picker.doModal();
        cal=picker.getDateTime();
        str="";
        if((cal.get(Calendar.MONTH)+1)<10)
            str=str+cal.get(Calendar.YEAR)+"-"+"0"+(cal.get(Calendar.MONTH)+1);
        else
            str=str+cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1);

        if(cal.get(Calendar.DATE)<10)
            str=str+"-"+"0"+cal.get(Calendar.DATE);
        else
            str=str+"-"+cal.get(Calendar.DATE);

        if(cal.get(Calendar.HOUR_OF_DAY)<10)
            str=str+" "+"0"+cal.get(Calendar.HOUR_OF_DAY);
        else
            str=str+" "+cal.get(Calendar.HOUR_OF_DAY);

        if(cal.get(Calendar.MINUTE)<10)
            str=str+":"+"0"+cal.get(Calendar.MINUTE);
        else
            str=str+":"+cal.get(Calendar.MINUTE);

        if(cal.get(Calendar.SECOND)<10)
            str=str+":"+"0"+cal.get(Calendar.SECOND);
        else
            str=str+":"+cal.get(Calendar.SECOND);
        return str;
    }
}

, который вы видите на экране как следующий enter image description here

0 голосов
/ 27 марта 2012

HttpDateParser принимает только время? Согласно http://www.blackberry.com/developers/docs/6.0.0api/net/rim/device/api/io/http/HttpDateParser.html#parse%28java.lang.String%29 также должна быть указана дата. Поэтому, вероятно, для быстрого исправления, если вам действительно нужно использовать этот класс, измените «1:00:00» на «2010-10-10T01: 00: 00» и «2:00:00» на «2010-10-10T02» : 00: 00"

0 голосов
/ 27 марта 2012

Я думаю, что строка, которую вы передали, не в ожидаемом формате. Пожалуйста, смотрите эту ссылку API RIM BlackBerry для получения дополнительной информации.

Форматированные строки должны быть любыми из этих

"Wdy, DD Mon YY"
"Wdy, DD Mon YYYY"
"Wdy, DD Mon YY HH:MM:SS"
"Wdy, DD Mon YY HH:MM:SS GMT"
"Wdy, DD Mon YY HH:MM:SS TZD"
"Wdy, DD Mon YY HHMMSS"
"Wdy, DD Mon YY HHMMSS GMT"
"Wdy, DD Mon YY HHMMSS TZD"
"Wdy, DD Mon YYYY HH:MM:SS"
"Wdy, DD Mon YYYY HH:MM:SS GMT"
"Wdy, DD Mon YYYY HH:MM:SS TZD"
"Wdy, DD Mon YYYY HHMMSS"
"Wdy, DD Mon YYYY HHMMSS GMT"
"Wdy, DD Mon YYYY HHMMSS TZD"
"Wdy, Mon DD YY HH:MM:SS"
"Wdy, Mon DD YY HH:MM:SS GMT"
"Wdy, Mon DD YY HH:MM:SS TZD"
"Wdy, Mon DD YY HHMMSS"
"Wdy, Mon DD YY HHMMSS GMT"
"Wdy, Mon DD YY HHMMSS TZD"
"Wdy, Mon DD YYYY HH:MM:SS"
"Wdy, Mon DD YYYY HH:MM:SS GMT"
"Wdy, Mon DD YYYY HH:MM:SS TZD"
"Wdy, Mon DD YYYY HHMMSS"
"Wdy, Mon DD YYYY HHMMSS GMT"
"Wdy, Mon DD YYYY HHMMSS TZD"
"Wdy, DD Mon YY, HH:MM:SS"
"Wdy, DD Mon YY, HH:MM:SS GMT"
"Wdy, DD Mon YY, HH:MM:SS TZD"
"Wdy, DD Mon YY, HHMMSS"
"Wdy, DD Mon YY, HHMMSS GMT"
"Wdy, DD Mon YY, HHMMSS TZD"
"Wdy, DD Mon YYYY, HH:MM:SS"
"Wdy, DD Mon YYYY, HH:MM:SS GMT"
"Wdy, DD Mon YYYY, HH:MM:SS TZD"
"Wdy, DD-Mon-YY HH:MM:SS"
"Wdy, DD-Mon-YY HH:MM:SS GMT"
"Wdy, DD-Mon-YY HH:MM:SS TZD"
"Wdy, DD-Mon-YY HHMMSS"
"Wdy, DD-Mon-YY HHMMSS GMT"
"Wdy, DD-Mon-YY HHMMSS TZD"
"Wdy, DD-Mon-YY, HH:MM:SS"
"Wdy, DD-Mon-YY, HH:MM:SS GMT"
"Wdy, DD-Mon-YY, HH:MM:SS TZD"
"Wdy, DD-Mon-YY, HHMMSS"
"Wdy, DD-Mon-YY, HHMMSS GMT"
"Wdy, DD-Mon-YY, HHMMSS TZD"
"Wdy, DD-Mon-YYYY HH:MM:SS"
"Wdy, DD-Mon-YYYY HH:MM:SS GMT"
"Wdy, DD-Mon-YYYY HH:MM:SS TZD"
"Wdy, DD-Mon-YYYY HHMMSS"
"Wdy, DD-Mon-YYYY HHMMSS GMT"
"Wdy, DD-Mon-YYYY HHMMSS TZD"
"Wdy, DD-Mon-YYYY, HH:MM:SS"
"Wdy, DD-Mon-YYYY, HH:MM:SS GMT"
"Wdy, DD-Mon-YYYY, HH:MM:SS TZD"
"Wdy, DD-Mon-YYYY, HHMMSS"
"Wdy, DD-Mon-YYYY, HHMMSS GMT"
"Wdy, DD-Mon-YYYY, HHMMSS TZD"
"Weekday, DD-Mon-YY HH:MM:SS"
"Weekday, DD-Mon-YY HH:MM:SS GMT"
"Weekday, DD-Mon-YY HH:MM:SS TZD"
"Weekday, DD-Mon-YY HHMMSS"
"Weekday, DD-Mon-YY HHMMSS GMT"
"Weekday, DD-Mon-YY HHMMSS GMT"
"Weekday, DD-Mon-YYYY HH:MM:SS"
"Weekday, DD-Mon-YYYY HH:MM:SS GMT"
"Weekday, DD-Mon-YYYY HH:MM:SS TZD"
"Weekday, DD-Mon-YYYY HHMMSS"
"Weekday, DD-Mon-YYYY HHMMSS GMT"
"Weekday, DD-Mon-YYYY HHMMSS TZD"
"Wdy Mon DD HH:MM:SS YYYY"
"YYYY" (eg 1997)
"YYYY-MM" (eg 1997-07)
"YYYY-MM-DD" (eg 1997-07-16)
"YYYY-MM-DDThh:mmTZD" (eg 1997-07-16T19:20+01:00)
"YYYY-MM-DDThh:mm:ssTZD" (eg 1997-07-16T19:20:30+01:00)
"YYYY-MM-DDThh:mm:ss.sTZD" (eg 1997-07-16T19:20:30.45+01:00)
...