Java:时区为什么不同的时区以毫秒为单位给出相同的值

时间:2012-03-26 05:52:34

标签: java

我有以下代码,我的目标是以毫秒为单位返回GMT+0时间。但为什么我总是得到我当地的时区millisec?

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Calendar cal2 = Calendar.getInstance();
System.out.println("Time zone id is:"+cal.getTimeZone().getID()+";time in millisec:"+cal.getTimeInMillis());
System.out.println("Time zone id is:"+cal2.getTimeZone().getID()+";time in millisec:"+cal2.getTimeInMillis());

输出
时区ID为:GMT;以毫秒为单位的时间:1332740915154
时区ID为:欧洲/赫尔辛基;时间以毫秒为单位:1332740915154

为什么不同的时区以毫秒为单位给出SAME值? 我想如果它是GMT+0那么它应该是毫秒与本地时区的不同值。

3 个答案:

答案 0 :(得分:23)

  

为什么不同的时区以毫秒为单位给出SAME值?

因为这就是的意思。来自文档:

  

(返回)从纪元开始的UTC毫秒的当前时间。

换句话说,它是Date返回的getTime中的值 - 它不依赖于时区。如果您想要取决于时区的值,请使用Calendar.Get(Calendar.YEAR)

Calendar.getTime()Calendar.getTimeInMillis()都会在日历中及时返回代表 instant 的值,这与时区和日历系统无关。

答案 1 :(得分:6)

Java 中的Date对象的millisec只是GMT+0 1970/01/01 00:00:00以来的毫秒数。它独立于时区。时区是将Date格式化为可读字符串的属性。

答案 2 :(得分:1)

getTimeInMillis()方法从当前时间返回UTC毫秒的当前时间。因此,即使两个日历对象具有不同的时区,您也会获得相同的毫秒数。