计算时差bug

时间:2015-03-11 08:08:22

标签: java date

我正在尝试计算两个日期之间的差异。差异包括剩余天数,小时数,分钟数,秒数。

我使用这种方法:

public static void computeDiff(Date date2) {
        Date date1 = new Date();
        long diffInMillies = date2.getTime() - date1.getTime();

        long milliesRest = diffInMillies;

        for ( TimeUnit unit : timeUnitsArrayList ) {
            long diff = unit.convert(milliesRest, TimeUnit.MILLISECONDS);
            long diffInMilliesForUnit = unit.toMillis(diff);
            milliesRest -= diffInMilliesForUnit;
            result.put(unit, diff);
        }
}

/*
TimeUnit = java.util.concurrent.TimeUnit
timeUnitsArrayList = A list with units: DAYS, HOURS, MINUTES, SECONDS
date1 = java.util.Date (date now)
date2 = java.util.Date (a date with time 00:00:00)
*/

我举一个例子:如果我想要今天和2015年3月20日之间的差异,差异就可以了(8天,X小时,Y分钟,Z秒),但是如果我选择更旧的日期如2015年4月20日,差异将是39天(确定),X - 1小时(由于计算错误而不是正常),Y分钟(ok),Z秒(ok)。

我的代码中是Java错误还是错误?因为如果我选择较早的日期,那么时间就可以了,但是如果我选择较旧的日期,我会把时间错误(少一个小时)

谢谢

1 个答案:

答案 0 :(得分:3)

这很可能是切换到夏令时的问题 - 在中欧,这个变化发生在3月29日,所以在你的时区(无论在哪里)它可能是相似的,并且会占1小时。