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

All datetimes stored in utc

我正在构建一个 c# 日历应用程序并将所有日期时间存储在 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 值,同时还允许我在指定的开始和停止日期时间范围内查询匹配项?

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

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