【问题标题】:Java calendar in different time zone gives different values for same time不同时区的Java日历为同一时间提供不同的值
【发布时间】:2013-02-12 20:00:35
【问题描述】:

嗨,在下面的代码中,我得到的输出是 9 和 10,为什么会这样?即使日历属于不同的时区,我们也会传递相同的日期来设置时间。据我所知,时间是从纪元作为相对值计算出来的,所以无论什么时区,这个相对值都应该是相同的

我在一个时区的数据库和另一个时区的服务器面临着类似的问题。

Date date = new Date ();
    Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"),Locale.US);
    Calendar c1 = Calendar.getInstance();
    c.setTime(date);
    c1.setTime(date);
    System.out.println(c.get(Calendar.HOUR));
    System.out.println(c1.get(Calendar.HOUR));

【问题讨论】:

  • 现在洛杉矶的时间和你住的地方一样吗?格林威治也一样吗?来自 wiki “时区是地球上具有统一标准时间的区域......陆地上的大多数时区与协调世界时 (UTC) 有一个整数小时 (UTC-12 到UTC+14),但有一些偏移了 30 或 45 分钟。一些高纬度国家在一年中的部分时间使用夏令时,通常将时钟更改一个小时。"
  • 您好,感谢您的宝贵时间,但请不要说我为日历实例设置了相同的时间,即使在为日历实例设置了正常的时间之后,它们返回的值也不同,这就是我的困惑是
  • 是的,但是您在两个不同的时区设置“相同时间”,这就是每个人都在做的事情。格林威治标准时间上午 10 点!= 太平洋标准时间上午 10 点。

标签: java date calendar timezone


【解决方案1】:

当您传入日期时,将采用其 UTC 时间戳(因此自 GMT+0 的 01-01-1970 以来的毫秒数),然后您将两个日历设置为同一时间,并询问现在是几点。

显然,不同时区的小时会有所不同 - 洛杉矶时区和运行代码的计算机的时区,即使它们已使用完全相同的 UTC 时间初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2019-02-12
    • 2020-10-20
    • 2013-07-16
    • 2018-09-08
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多