【发布时间】:2014-02-03 14:58:15
【问题描述】:
这是一个类似于this one的问题。
我真的很想在我的应用程序中将日期时间存储为当地时间而不是 UTC(这被认为是最佳实践)。在应用程序中,我发生了许多事件,每个事件都分配到给定位置。当我向用户显示它们时,我总是想显示事件的本地时间。即:
====================================================================================
Event time (with TZ) | As UTC | As local time | To be displayed |
====================================================================================
2014-01-15 22:30 GMT | 2014-01-15 22:30 | 2014-01-15 22:30 | 2014-01-15 22:30 |
2014-01-15 23:30 GMT+1 | 2014-01-15 22:30 | 2014-01-15 23:30 | 2014-01-15 23:30 |
2014-01-16 00:30 GMT+2 | 2014-01-15 22:30 | 2014-01-16 00:30 | 2014-01-16 00:30 |
====================================================================================
如果我决定以 UTC 存储事件时间:
很难显示它们(因为对于每个事件,我都需要有事件的时区并格式化该时区的日期)。
查询它们将非常困难(即,如果我想显示当地时间 2014 年 1 月 15 日发生的所有事件,我需要为每个事件将该事件的时间与 '2014-01- 15' 表示在该事件的时区中。不确定这在 SQL 中是否可行...)
如果我决定将事件时间存储为当地时间:
- 我无法比较不同地点的活动时间(但这对我来说没问题)
因为在应用程序的绝大多数情况下,我对当地时间(通常显示所谓的“电视时间”)感兴趣,并且我创建新的日期时间对象的情况并不多(例如我需要位置时区),我相信在这种情况下将日期时间保存为本地时间是合理的。
你认为是吗?存储当地时间还有哪些其他缺点?
提前感谢您的关注和帮助。
【问题讨论】:
-
您的目标是什么语言和数据库?
-
@Matt Johnson:Java + PostgreSQL
-
那么请确保您熟悉Joda Time。那么事情应该为你排好队并且更有意义。
-
是的,已经使用 Joda Time 了:)
-
好。因此,只有在您拥有 Joda
LocalDateTime的情况下,您才应该在数据库中考虑当地时间。如果您有Instant或DateTime,那么您应该存储与 UTC 相关的数据。
标签: datetime time timezone utc dst