我知道有很多帖子与这个问题有关,但没有一个能够澄清我的疑问。
我需要以全局常量(UTC)毫秒值保存用户的DateTime值,这样它将有助于转换到不同的时区,因为我用两个不同的时区进行了一些测试,以下是我尝试的:
使用TimeZone - 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 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());
以下是我得到的结果:
IN PDT(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
问题是,
使用PDT时区,为什么本地毫秒和UTC毫秒相同? (与IST时区相同)
为什么来自两个不同时区的UTC值不同?
如果utc应该是全局常量,那么两个不同时区的值应该相同吗?
有人可以澄清我的疑问,我做错了吗?
请提出任何建议或澄清是非常有帮助的
由于 拉梅什
答案 0 :(得分:4)
我需要以全局常量(UTC)毫秒值
保存用户的DateTime值
然后,您需要做的只是在使用正确的本地日期/时间和时区构建的getMillis()
上调用DateTime
。您根本不需要使用withZone
。请注意,由于时区转换,某些本地日期/时间/区域组合可能不明确或被跳过。你应该考虑在这些情况下你想做什么。
使用PDT时区,为什么本地毫秒和UTC毫秒相同
因为你正在调用getMillis()
,这是自unix时代以来的毫秒数。无论时区如何,它都是即时的全球代表。
为什么两个不同TimeZone的UTC值不同?
您已将当地时间保持不变,但更改了时区 - 这意味着您指的是不同的时刻。
答案 1 :(得分:0)
我需要以全局常量(UTC)毫秒值保存用户的DateTime值,以便它有助于转换为不同的时区
你如何准确存储?
正如测试代码的输出清楚地表明的那样,Just Just(tm)。 Unix纪元是从格林威治标准时间1970年1月1日开始的即时时间的表示(通常以秒为单位,但Java输出毫秒)。您可以使用它转换为任何时区。
但是,您最好的选择仍然是在用户输入和时区时存储日期。这样你就可以进行任何你想要的计算。