0

我知道有很多与这个问题相关的帖子,但没有一个能够澄清我的疑问。

我需要将用户的 DateTime 值保存在全局常量(UTC)毫秒值中,以便它有助​​于转换为不同的时区,因为我用两个不同的时区进行了一些测试,以下是我尝试过的:

使用时区 - PDT (GMT - 7)

DateTime dateTime = new DateTime(2013, 07, 04, 1, 19, 22);
String format = "yyyy-MM-dd HH:mm:ss Z";

int offsetMinutes = (dateTime.getZone().getOffset(dateTime)/1000)/60;

log.info(" Current Timezone => "+dateTime.getZone()+", OffSet => "+offsetMinutes);
log.info(" dateTime => "+dateTime.toString(format)+" => "+dateTime.getMillis());

并且在 UTC 中具有相同的 DateTime

DateTime utcDateTime = dateTime.withZone(DateTimeZone.UTC);
offsetMinutes = (utcDateTime.getZone().getOffset(utcDateTime)/1000)/60;

log.info(" Current Timezone => "+utcDateTime.getZone()+", OffSet "+offsetMinutes);
log.info(" dateTime => "+utcDateTime.toString(format)+" => "+utcDateTime.getMillis());

以下是我得到的结果:

在太平洋夏令时间 (GMT - 7)

Current Timezone => America/Los_Angeles, OffSet => -420 (-7)
dateTime => 2013-07-04 01:19:22 -0700 => 1372925962000
Current Timezone => UTC, OffSet 0
dateTime => 2013-07-04 08:19:22 +0000 => 1372925962000

格林威治标准时间 +5:30

Current Timezone => Asia/Kolkata, OffSet => 330 (+5:30)
dateTime => 2013-07-04 01:19:22 +0530 => 1372880962000
Current Timezone => UTC, OffSet 0
dateTime => 2013-07-03 19:49:22 +0000 => 1372880962000

问题是,

  1. 使用 PDT 时区,为什么本地毫秒和 UTC 毫秒相同?(与 IST 时区相同)

  2. 为什么两个不同时区的 UTC 值不同?

如果 utc 应该是全局常量,那么两个不同时区的值应该相同吗?

有人可以澄清我的疑问,我做错了吗?

请任何建议或澄清将非常有帮助

谢谢拉梅什

4

2 回答 2

4

我需要将用户的 DateTime 值保存在全局常量(UTC)毫秒值中

然后,您需要做的就是调用具有正确本地日期/时间和时区的构造函数getMillis()DateTime你根本不需要使用withZone。请注意,由于时区转换,某些本地日期/时间/区域组合可能不明确或被跳过。你应该考虑在这些情况下你想做什么。

使用 PDT 时区,为什么本地毫秒和 UTC 毫秒相同

因为您正在调用getMillis(),这是自 unix 纪元以来的毫秒数。它是时间瞬间的全局表示,与时区无关。

为什么两个不同时区的 UTC 值不同?

您保持本地时间不变,但更改了时区 - 这意味着您指的是不同的时刻。

于 2013-07-04T08:30:56.650 回答
0

我需要将用户的 DateTime 值保存在全局常量(UTC)毫秒值中,以便它有助​​于转换为不同的时区

你如何准确地存储它?

正如您的测试代码的输出清楚地表明,它只是 Works(tm)。Unix 纪元是从 1970 年 1 月 1 日 GMT 开始的时间的表示(通常以秒为单位,但 Java 输出毫秒)。您可以使用它转换为任何时区。

但是您最好的选择仍然是存储用户输入的日期时区。这样你就可以进行任何你想要的计算。

于 2013-07-04T08:36:49.870 回答