Java中的日历时间毫秒

时间:2014-06-13 18:22:24

标签: java

为什么要追加?

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("GMT+2")); 

System.out.println(c1.get(Calendar.HOUR_OF_DAY)+":"+c1.get(Calendar.MINUTE));
System.out.println(c2.get(Calendar.HOUR_OF_DAY)+":"+c2.get(Calendar.MINUTE));

System.out.println(c1.getTimeInMillis() - c2.getTimeInMillis());

输出:

18:12
20:12
0 !!!!!!!!

我有2个不同的Calendar obj,一个在UTC时区设置,一个在GMT + 2上。 当我打印小时和秒时不同但为什么这个差异(c1.getTimeInMillis() - c2.getTimeInMillis())是0 ???

2 个答案:

答案 0 :(得分:1)

两个日历在UTC时间设置为相同的实例 - 它们是相同的。但是,它们被设置为不同的时区,报告函数get(Calendar.HOUR_OF_DAY)使用它来为您提供当地时间的小时(即受时区影响)。所以,你的比较是针对瞬间的,这是相同的。

答案 1 :(得分:0)

让我们说它是在西雅图的下午2点。这意味着它在印第安纳波利斯的下午4点。这些地方之间当前时间的差异是2小时还是0小时?我很确定它是0,否则在时空连续体中就会出现撕裂:)

背后的技术推理正如MarcB上面评论的那样:

来自文档:http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#getTimeInMillis%28%29

  

将此日历的当前时间作为UTC纪元的毫秒数返回。

使用什么时区来构造Calendar对象并不重要,它将是UTC。所以你的两个对象将在时间上具有相同的UTC时刻,它们之间的差异将为0。