Java计算时差不起作用

时间:2014-07-07 20:53:09

标签: java datetime time

我正在尝试计算两个日期/时间之间的时间差。这就是我导入的内容:

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”。错误的根源是什么?如何纠正?

3 个答案:

答案 0 :(得分:6)

这看起来对我来说是正确的......你已经有两个月了,所以60.5天(因为它从晚上8点开始到早上8点结束)。一天包含1440分钟。 1440 * 60.5是87120,非常接近你收到的答案。

不清楚你期望的答案,但Java正确的数学。错误的来源可能是您的期望:)

(顺便说一下,您可能希望指定UTC的时区,除非您希望这样的计算使用您的本地时区。由于这个原因,您可以轻松获得距离预期结果一小时的答案。)

答案 1 :(得分: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

这似乎是正确的......你有两个月的差异吧?

或者检查您的日期假设。可能是你用 dd yy 做出了一些错误的假设,尝试将 yyyy 放在一起,并在你的一年内将其更正为2011年或2014年根据你的期望。这是我的结果:P

答案 2 :(得分: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);
    }
}