2014-07-07 52 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); 
    } 
}