【发布时间】:2017-03-02 16:15:30
【问题描述】:
我做了实验
for (String tz: TimeZone.getAvailableIDs()) {
TimeZone.setDefault(TimeZone.getTimeZone(tz));
timestamp = Timestamp.valueOf("1970-01-01 00:00:00.000");
System.out.println(tz + " - " + timestamp.getTime());
}
出乎意料的是,每个时区的结果都不同。这背后的逻辑是什么?一直认为时间戳与时区无关。
【问题讨论】:
-
"1970-01-01 00:00:00.000"必须在 some 时区的上下文中进行解释,因此它使用默认时区。你认为它只会使用 UTC 吗? -
@GriffeyDog 是的,问题是日期字符串来自数据库,它被视为 UTC 日期
-
Strings 没有时区。要将String转换为Timestamp,需要应用时区。valueOf使用默认时区进行从String到Timestamp的转换。 -
@GriffeyDog 嗯,奇怪的是 Timestamp 不支持在字符串中指定时区
-
查看 dup 链接,还有this answer 以获得更详细的说明。