我在这个论坛的一个帖子中找到了:
SimpleDateFormat dateformat = new SimpleDateFormat(format);
dateformat.setTimeZone(TimeZone.getDefault());
dateformat.format(date);
我不确定它是否真的有效。输入参数没有提到它所处的时区。在这种情况下,它将如何知道如何转换?
答案 0 :(得分:3)
java.util.Date
(基类java.sql.Date
)始终表示UTC中的时间瞬间。时区是您在格式化显示时间时应用的调整,正如您所做的那样。
所以答案是它不需要知道“输入时区”,因为没有一个 - 时间瞬间总是在UTC内部表示。
在处理时间价值时,进入这种心态真的很有意义。如果您认识到时间瞬间实际上与它们出现的时区无关,并且始终将它们存储在UTC中,则可以消除大量错误和浪费精力。认为“Instants是UTC;时区仅适用于与外部世界的接口”。当您需要接受带有时区的输入时,您应该做的第一件事就是在内部转换为UTC。在UTC中执行所有持久性和操作,然后仅在返回的路上应用时区。