所有日期时间都存储在utc中

时间:2015-10-13 19:53:58

标签: c# sql-server datetime web utc

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

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

Daylight saving time and time zone best practices

How to store repeating dates keeping in mind Daylight Savings Time

Is it always a good idea to store time in UTC or is this the case where storing in local time is better?

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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