【问题标题】:Java: Timezone why different timezone give same value in millisecJava:时区为什么不同的时区以毫秒为单位给出相同的值
【发布时间】:2012-03-26 05:52:33
【问题描述】:

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

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 为:Europe/Helsinki;time in millisec:1332740915154

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

【问题讨论】:

  • 您系统中的时区是多少?
  • System.currentTimeMillis(); 怎么样?
  • 我的时区是 GMT+2 夏令时
  • 现代评论:我建议你不要使用CalendarTimeZone。这些课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time APIInstantZoneId 如果您需要表示时区。

标签: java


【解决方案1】:

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

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

(返回)当前时间(以 UTC 毫秒为单位)从纪元算起。

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

Calendar.getTime()Calendar.getTimeInMillis() 都返回值表示日历中的时间即时,与时区和日历系统无关。

【讨论】:

  • 我怀疑时区给出毫秒还是它只给出请求的时区?
  • @sans481:我不知道你在问什么,恐怕——你能改写一下这个问题吗?
  • 我没有得到确切的返回“当前时间,距纪元的 UTC 毫秒数。”
  • @sans481:表示自 Unix 纪元“1970 年 1 月 1 日午夜,UTC”以来经过的毫秒数。
  • System.currentTimeMillis() 怎么样?它独立于 TimeZone 吗?
【解决方案2】:

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

【讨论】:

  • 这不是时区的真正用途;这更像是日历的用途。时区将在 UTC 和本地时间之间转换。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 2019-04-09
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2021-09-05
    相关资源
    最近更新 更多