2014-07-07 84 views
0

我想計算兩個日期/時間之間的時間差。這是我的輸入:Java計算時差不起作用

import java.util.concurrent.TimeUnit; 
import java.text.*; 
import java.util.*; 

這是我的代碼:

SimpleDateFormat format= new SimpleDateFormat("yy/MM/dd HH:mm:ss"); 


String dateStart = "11/03/14 19:29:58"; 
String dateStop = "11/05/14 08:03:13"; 

Date d1=null; 
Date d2=null; 
try{ 
    d1 = format.parse(dateStart); 
    d2=format.parse(dateStop); 
} 
catch(ParseException e) 
{ 
    e.printStackTrace(); 
} 

long diff = d2.getTime()-d1.getTime(); 

long seconds = TimeUnit.MILLISECONDS.toSeconds(diff); 
long minutes=TimeUnit.MILLISECONDS.toMinutes(diff); 
System.out.println(minutes); 

此,我認爲,應該工作正常,但不是正確的答案,我得到「87153」。錯誤的來源是什麼?如何糾正?

+1

的'diff'是毫秒。 – Braj

+1

根據我的數學,87,153分鐘約爲60天半,這是2011年3月14日19時29分58秒和2011年5月14日08時03分13秒之間的差異。 – rgettman

+0

請檢查這個帖子http://stackoverflow.com/questions/5351483/calculate-date-time-difference-in-java – bestalign

回答

3

這似乎是正確的。

long seconds = TimeUnit.MILLISECONDS.toSeconds(diff); 
System.out.println(seconds); 
long minutes=TimeUnit.MILLISECONDS.toMinutes(diff); 
System.out.println(minutes); 
long hours=TimeUnit.MILLISECONDS.toHours(diff); 
System.out.println(hours); 
long days=TimeUnit.MILLISECONDS.toDays(diff); 
System.out.println(days); 

給出的

5229195 
87153 
1452 
60 

輸出這似乎是正確的......你有兩個月的區別吧?

否則檢查您的日期假設。可能是你做出了一些錯誤的假設與ddyy,嘗試把yyyy並在你的一年內也根據您的預期更正到2011年或2014年。這是我的assuption:P

+0

是的,這正是發生的事情。我以爲我輸入月份/日期/年份,就像美國的標準一樣。 – user3000877

6

對我來說這看起來是正確的......你已經有兩個月的時間了,所以60.5天(因爲它開始於晚上8點,結束於早上8點)。一天包含1440分鐘。 1440 * 60.5是87120,這與您收到的答案非常接近。

目前還不清楚你會回答什麼預計,但Java的數學正確。錯誤的來源大概是你的期望:)

(另外,你可能想指定一個UTC時區,除非你想這樣的計算使用你的本地時區,你可以很容易地得到答案由於這個原因,你的預期結果是一個小時)。

0

始終使用日曆:

import java.text.SimpleDateFormat; 
import java.util.concurrent.TimeUnit; 
import java.text.*; 
import java.util.*; 

public class DateDiff { 
    public static void main(String[] arg){ 
     SimpleDateFormat format= new SimpleDateFormat("yy/MM/dd HH:mm:ss"); 


     String dateStart = "11/03/14 08:03:58"; 
     String dateStop = "11/05/14 08:20:13"; 

     Date d1=null; 
     Date d2=null; 
     try{ 
      d1 = format.parse(dateStart); 
      d2 = format.parse(dateStop); 
     } 
     catch(ParseException e) 
     { 
      e.printStackTrace(); 
     } 
     Calendar cal1 = Calendar.getInstance(); 
     cal1.setTime(d1); 
     Calendar cal2 = Calendar.getInstance(); 
     cal2.setTime(d2); 
     long seconds = cal2.get(Calendar.SECOND) - cal1.get(Calendar.SECOND); 
     long minutes= cal2.get(Calendar.MINUTE) - cal1.get(Calendar.MINUTE); 
     System.out.println(minutes); 
     System.out.println(seconds); 
    } 
}