Datetime 何时可以将日期时间存储为本地时间而不是UTC?

Datetime 何时可以将日期时间存储为本地时间而不是UTC?,datetime,time,timezone,utc,dst,Datetime,Time,Timezone,Utc,Dst,这是一个类似的问题 我真的很想在我的应用程序中将日期时间存储为本地时间,而不是UTC(这被认为是最佳实践)。在应用程序中,我有许多事件发生,每个事件都分配到一个给定的位置。当我向用户显示它们时,我总是想显示事件的本地时间。即: ==================================================================================== Event time (with TZ) | As UTC | As loca

这是一个类似的问题

我真的很想在我的应用程序中将日期时间存储为本地时间,而不是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-01-15当地时间发生的所有事件,我需要每个事件将该事件的时间与该事件时区中“2014-01-15”的含义进行比较。不确定这在SQL中是否可行…)

如果我决定将事件时间存储为本地时间:

  • 我无法比较不同地点的活动时间(但这对我来说没问题)
由于在绝大多数情况下,我对应用程序中的本地时间(通常显示,所谓的“电视时间”)感兴趣,并且我创建新datetime对象(我需要位置时区)的情况并不多,因此我认为在这种情况下,将datetime保存为本地时间是合理的

你认为是吗?存储本地时间还有哪些缺点


提前感谢您的关注和帮助。

最常被忽略的不使用UTC的情况是安排未来的时间,尤其是在重复模式下

想象一下,如果你的闹钟是由UTC安排的。假设你设定每天早上7点。在DST转换后的第二天,您可能会在早上6:00或8:00醒来,这取决于转换的方向

此外,我们用来确定时区偏移和夏令时更改的规则会一直更新!因此,如果不保留本地时间本身,就不能将未来的本地时间转换为UTC。否则,当事情发生变化时,你将无法获得真相的原始来源,你的所有时间都将被关闭

我在网上发了帖子

当然,一旦事件发生,您当然希望在UTC或使用

另一个常见的用例是没有时间的日期,尤其是出生日期和其他周年纪念日。这些数据应始终存储为年、月、日(例如在大多数数据库中的
date
字段类型中),不在时区或UTC之间进行转换

关于你的具体观点:

如果我决定以UTC格式存储事件时间。。。很难展示它们

这其实很容易。几乎每个编程环境都可以轻松地做到这一点。唯一困难的地方是非本地时区的JavaScript,有一些库可以解决这个问题

如果我决定以UTC格式存储事件时间。。。查询它们将非常困难(即,如果我想显示2014-01-15当地时间发生的所有事件,我需要每个事件将该事件的时间与该事件时区中“2014-01-15”的含义进行比较。不确定这在SQL中是否可行…)

这是真的。每个人的“今天”都不一样。如果您需要绑定到浮动“日”的数据,则这是不存储在UTC中的另一种情况。但是,
DateTimeOffset
将为您提供两者的优点

如果我决定将事件时间存储为本地时间。。。我无法比较不同地点的活动时间(但这对我来说没问题)

不止这些。没有偏移量的本地日期时间对来说可能不明确。因此,您可能有一个单一的局部值,无法区分它对应于两个时间点中的哪一个


关于“电视时间”——将这个概念保留在真正“浮动”的事物上。一家公司在世界各地都设有办事处,办公时间都是早上8点。这是一个浮动时间。

最常被忽略的不使用UTC的情况是安排未来的时间,尤其是在重复模式中

想象一下,如果你的闹钟是由UTC安排的。假设你设定每天早上7点。在DST转换后的第二天,您可能会在早上6:00或8:00醒来,这取决于转换的方向

此外,我们用来确定时区偏移和夏令时更改的规则会一直更新!因此,如果不保留本地时间本身,就不能将未来的本地时间转换为UTC。否则,当事情发生变化时,你将无法获得真相的原始来源,你的所有时间都将被关闭

我在网上发了帖子

当然,一旦事件发生,您当然希望在UTC或使用

另一个常见的用例是没有时间的日期,尤其是出生日期和其他周年纪念日。这些数据应始终存储为年、月、日(例如在大多数数据库中的
date
字段类型中),不在时区或UTC之间进行转换

关于你的具体观点:

如果我决定以UTC格式存储事件时间。。。很难展示它们

这其实很容易。几乎每个编程环境都可以轻松地做到这一点。唯一困难的地方是非本地时区的JavaScript,有一些库可以解决这个问题

如果我决定以UTC格式存储事件时间。。。查询它们将非常困难(即,如果我想显示2014-01-15当地时间发生的所有事件,我需要每个事件将该事件的时间与该事件时区中“2014-01-15”的含义进行比较。不确定这在SQL中是否可行…)

这是真的。每个人的“今天”是不同的