使用jodatime进行时区转换

时间:2016-07-01 04:17:45

标签: java jodatime

我在这个论坛的一个帖子中找到了:

SimpleDateFormat dateformat = new SimpleDateFormat(format);
dateformat.setTimeZone(TimeZone.getDefault());
dateformat.format(date);

我不确定它是否真的有效。输入参数没有提到它所处的时区。在这种情况下,它将如何知道如何转换?

1 个答案:

答案 0 :(得分:3)

java.util.Date(基类java.sql.Date)始终表示UTC中的时间瞬间。时区是您在格式化显示时间时应用的调整,正如您所做的那样。

所以答案是它不需要知道“输入时区”,因为没有一个 - 时间瞬间总是在UTC内部表示。

在处理时间价值时,进入这种心态真的很有意义。如果您认识到时间瞬间实际上与它们出现的时区无关,并且始终将它们存储在UTC中,则可以消除大量错误和浪费精力。认为“Instants是UTC;时区仅适用于与外部世界的接口”。当您需要接受带有时区的输入时,您应该做的第一件事就是在内部转换为UTC。在UTC中执行所有持久性和操作,然后仅在返回的路上应用时区。