使用jodatime进行时区转换
Timezone conversion using jodatime
我在本论坛的一个帖子中找到:
SimpleDateFormat dateformat = new SimpleDateFormat(format);
dateformat.setTimeZone(TimeZone.getDefault());
dateformat.format(date);
我不确定它是否真的有效。输入参数没有提到它在哪个时区。那么它怎么知道如何转换?
A java.util.Date
(java.sql.Date
的基数 class)始终表示 UTC 中的瞬间。时区是您在格式化显示时间时应用的调整,正如您所做的那样。
所以答案是它不需要知道 "input timezone" 因为没有 - 时刻总是在内部以 UTC 表示。
在处理时间价值时,进入这种心态真的很值得。如果您认识到时间的瞬间真正独立于它们发生的时区,并始终将它们存储在 UTC 中,则可以消除巨大的错误源和浪费的精力。想想"Instants are UTC; timezones only apply when interfacing with the outside world"。当您需要接受带有时区的输入时,您应该做的第一件事是在内部转换为 UTC。在 UTC 中执行所有持久性和操作,然后仅在返回时应用时区。
我在本论坛的一个帖子中找到:
SimpleDateFormat dateformat = new SimpleDateFormat(format);
dateformat.setTimeZone(TimeZone.getDefault());
dateformat.format(date);
我不确定它是否真的有效。输入参数没有提到它在哪个时区。那么它怎么知道如何转换?
A java.util.Date
(java.sql.Date
的基数 class)始终表示 UTC 中的瞬间。时区是您在格式化显示时间时应用的调整,正如您所做的那样。
所以答案是它不需要知道 "input timezone" 因为没有 - 时刻总是在内部以 UTC 表示。
在处理时间价值时,进入这种心态真的很值得。如果您认识到时间的瞬间真正独立于它们发生的时区,并始终将它们存储在 UTC 中,则可以消除巨大的错误源和浪费的精力。想想"Instants are UTC; timezones only apply when interfacing with the outside world"。当您需要接受带有时区的输入时,您应该做的第一件事是在内部转换为 UTC。在 UTC 中执行所有持久性和操作,然后仅在返回时应用时区。