2013-10-30 14 views
8

時間差を取得するために、以下のJavaコードを実行しました。 yyyy-MM-dd hh:mm:ss形式を使用して日付が予期しない差異が発生しました

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); 
     } 
    } 
} 

上記のプログラムの出力がある。

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. 

その戻りマイナス値"checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00");"

なぜその戻りマイナス値とどのようにそれを解決するための実行?

答えて

9

これは問題です:

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

ここhhは「12時間の時間-の日」を意味し、12 PMであることを意味していますことを示すために何かがありますない限り、12は真夜中を意味します。 13の値は、パーサーが寛大なモードにあるためにのみ機能します。あなたはしたい:それはたくさん簡単になるよう

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

は私も強く、あなたはとにかく、この作業のためにJoda Timeを使用することをお勧めします。

3

SimpleDateFormatパターンをyyyy-MM-dd HH:mm:ssに変更すると、問題が修正されます。

yyyy-MM-dd hh:mm:ssの場合、120と評価されます。

関連する問題