使用jodatime进行时区转换

Timezone conversion using jodatime

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

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

我不确定它是否真的有效。输入参数没有提到它在哪个时区。那么它怎么知道如何转换?

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

所以答案是它不需要知道 "input timezone" 因为没有 - 时刻总是在内部以 UTC 表示。

在处理时间价值时,进入这种心态真的很值得。如果您认识到时间的瞬间真正独立于它们发生的时区,并始终将它们存储在 UTC 中,则可以消除巨大的错误源和浪费的精力。想想"Instants are UTC; timezones only apply when interfacing with the outside world"。当您需要接受带有时区的输入时,您应该做的第一件事是在内部转换为 UTC。在 UTC 中执行所有持久性和操作,然后仅在返回时应用时区。