关于c#:存储在utc中的所有日期时间

All datetimes stored in utc

我正在构建一个c#calendar应用程序,并将所有日期时间存储在Microsoft SQL-Server DateTime2类型中。此数据类型可使用">","> ="等运算符进行搜索。

我现在已经阅读了有关该主题的更多内容,例如这些帖子:

夏令时和时区最佳实践

如何存储重复日期,记住夏令时

以UTC格式存储时间总是一个好主意,还是在本地时间存储更好?

我相信在使用UTC和处理不同的DST值时,尤其是在与未来重复事件相关时,我犯了一个错误。

我当前的实现适用于事件,直到重复序列超过DST时间更改。

我相信我现在需要存储
当地时间,
当地时区
可能还有UTC时间

我应该如何构建我的数据库以及我应该使用哪些数据类型将数据存储在数据库中,该数据库将支持不同的客户端时区和DST值,同时还允许我查询指定的开始和停止日期时间范围内的匹配?


对于重复的事??件,你肯定需要存储时区,是的,我会存储本地日期/时间。您可能还希望存储第一个匹配项的UTC值,如果这对比较有用。理论上你可以只存储第一个日期/时间的UTC出现,因为它可以明确地转换为当地时间(如果你有时区) - 但你可能只需要当地时间,执行这些转换的情况可能毫无意义。

您还应该考虑如何处理时区数据的更改 - 因为时区规则确实经常发生变化。 (当然,这取决于国家。)例如,为了提高效率,您可能希望生成一定数量的事件并存储每次事件的UTC日期/时间(已经确定如何处理由于跳过和模糊的当地时间DST转换) - 但如果时区数据发生变化,则需要再次对所有重复事件执行该生成步骤。