不同的长值产生相同的时间

时间:2013-12-14 18:15:45

标签: java date

我很难过。这对我来说毫无意义。以下代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
long lFirst = 1383460981000L;
long lSecond = 1383464581000L;
System.out.println(lFirst);
System.out.println(lSecond);

java.util.Date first  = new Date(lFirst);
java.util.Date second = new Date(lSecond);

System.out.println(sdf.format(first));
System.out.println(sdf.format(second));

System.out.println(first.getTime());
System.out.println(second.getTime());

System.out.println("Diff" + (first.getTime() - second.getTime()));

System.out.println("Hours diff: " + (((float)(second.getTime()-first.getTime()))/1000f/60f/60f));

产生以下输出:

1383460981000
1383464581000
2013-11-03 01:43:01.000
2013-11-03 01:43:01.000
1383460981000
1383464581000
Diff-3600000
Hours diff: 1.0

这两个不同的长值如何产生完全相同的日期?我在执行从一种数据库类型到另一种数据库类型的数据迁移并验证结果时遇到了这种情况。我无法理解我所看到的验证失败,所以我创建了一小段代码来比较这些值,确定无疑。虽然我愿意接受我的数据库中存在一些时区怪异,但这似乎不是这个代码示例中的问题。

2 个答案:

答案 0 :(得分:6)

这可能是夏令时变化的时刻:时间从凌晨1点到凌晨2点,再次回到凌晨1点。所以,如果你加1小时到1:43:01,你会回到1:43:01。

答案 1 :(得分:1)

这种情况发生在从夏令时到冬季的过渡期间。

由于时钟被改回一个小时,你会得到一个小时的重复两次的时间戳。

当转换发生在春天的另一个方向时,有一个小时的“缺失”时间戳。