Java 不同的长值产生相同的时间
我被难住了。这对我来说毫无意义。以下代码:Java 不同的长值产生相同的时间,java,date,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(lFir
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
这两个不同的长值如何产生完全相同的日期?我在执行从一种数据库类型到另一种数据库类型的数据迁移并验证结果时遇到了这个问题。我无法理解我看到的验证失败,所以我创建了这个代码片段来比较这些值。虽然我愿意承认我的数据库中存在一些时区的奇怪现象,但这似乎不是这个代码示例中的问题。这可能是夏令时变化的时刻:时间从凌晨1点到凌晨2点,然后又回到凌晨1点。因此,如果将1小时添加到1:43:01,则返回到1:43:01。这发生在从夏令时到冬季的过渡期间 由于时钟向后改变了一个小时,你得到了一个小时的时间戳,重复两次
当转换在春季以另一种方式发生时,会有一个小时的“丢失”时间戳。不需要在标题中添加主标记。代码不一定会生成该输出。在我的系统上,它与DateFormats不同,许多其他Java库类的方法取决于它们所使用的当前环境。要避免这种情况,您必须明确指定时区、字符集等。您所在的时区是什么,或者更准确地说,您的计算机设置为什么时区?夏时制开始时,时间倒退一小时,这意味着相同的一小时(具有不同的时区)会重复。