2013-10-30 3 views
8

Ich habe den folgenden Java-Code ausgeführt, um Zeitunterschied zu erhalten.Unerwarteter Unterschied in Daten analysiert mit yyyy-MM-dd hh: mm: ss-Format

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.TimeZone; 


public class Test 
{ 
    public static SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
    public static Date date1,date2; 
    public static long diff; 
    public static String TAG ="DateConversion"; 
    public static Calendar cal1,cal2; 

    public static void main(String a[]) 
    { 
     checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 11:15:00"); 
     checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00"); 
     checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 13:15:00"); 
    } 

    public static void checkTimeDifference(String strDate,String checkDate) 
    { 
     try 
     { 
      simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
      date1 = simpleDateFormat.parse(strDate); 
      date2 = simpleDateFormat.parse(checkDate); 

      //in milliseconds 
      diff = date2.getTime() - date1.getTime(); 
      System.out.println("Difference : "+diff); 
      long diffSeconds = diff/1000 % 60; 
      long diffMinutes = diff/(60 * 1000) % 60; 
      long diffHours = diff/(60 * 60 * 1000) % 24; 
      long diffDays = diff/(24 * 60 * 60 * 1000); 
      System.out.println(diffDays  + " days, "); 
      System.out.println(diffHours + " hours, "); 
      System.out.println(diffMinutes+ " minutes, "); 
      System.out.println(diffSeconds+ " seconds."); 
     } 
     catch (Exception e) 
     { 
      System.out.println(""+e); 
     } 
    } 
} 

die Ausgabe des obigen Programms ist.,

Difference : 3600000 
0 days, 
1 hours, 
0 minutes, 
0 seconds. 
Difference : -36000000 
0 days, 
-10 hours, 
0 minutes, 
0 seconds. 
Difference : 10800000 
0 days, 
3 hours, 
0 minutes, 
0 seconds. 

ihr Rückgabewert minus wenn "checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00");"

warum seine Rückkehr minus Wert ausführt und wie es zu lösen?

Antwort

9

Das ist das Problem:

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") 

Die hh hier bedeutet "12 Stunden Stunden-of-day", so bedeutet 12 Uhr, es sei denn es etwas gibt, um anzuzeigen, dass es 12 PM gemeint ist. Ihr Wert von 13 funktioniert nur, weil der Parser in einem milden Modus ist. Sie wollen:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 

Ich würde auch empfehlen Ihnen dringend Joda Time für diese Aufgabe trotzdem zu verwenden, da es macht es zu einem viel einfacher.

3

Durch Ändern des SimpleDateFormat-Musters auf yyyy-MM-dd HH:mm:ss werden die Probleme behoben.

Dies geschieht, weil im yyyy-MM-dd hh:mm:ss Fall 12 als 0 ausgewertet wird.