为了保持简短和甜蜜,我有 2 台 PC:
PC 1 已关闭夏令时
PC 2 已打开 DST。
PC 1 向 PC 2 发送一个 DateTime,它需要并使用它来设置它的时间。
以上所有我都有,但我的问题是,当 PC 2 收到 DateTime 时,我如何检查它是否需要 DST 调整?
个人电脑是英国的。
编辑:- 更多细节以防有混淆。当 PC 2 从 PC 1 检索时间时,它会将系统时间更改为此值,但我需要确保如果需要 +/- 1 小时 (DTS),则在设置系统日期和时间之前应用它。
为了保持简短和甜蜜,我有 2 台 PC:
PC 1 已关闭夏令时
PC 2 已打开 DST。
PC 1 向 PC 2 发送一个 DateTime,它需要并使用它来设置它的时间。
以上所有我都有,但我的问题是,当 PC 2 收到 DateTime 时,我如何检查它是否需要 DST 调整?
个人电脑是英国的。
编辑:- 更多细节以防有混淆。当 PC 2 从 PC 1 检索时间时,它会将系统时间更改为此值,但我需要确保如果需要 +/- 1 小时 (DTS),则在设置系统日期和时间之前应用它。
我建议使用 UTC 进行传输和持久性。
还要注意不要将日期时间用作算法的关键部分——它只是数据。日期和时间会发生变化并自行纠正。我见过应用程序在 PC 纠正它的时间时崩溃 :)
这是另一篇包含有关该主题的更多信息的帖子: 夏令时和时区最佳实践
您没有显示任何代码,但您将问题标记为c#,所以我将从这个角度回答。
如果您只需要确保您谈论的是同一时刻,请使用DateTimewith .Kind = DateTimeKind.Utc,例如 is 获得 from DateTime.UtcNow。
如果您确实需要知道 PC1 认为这是一次,而 PC2 认为是另一次,并且您仍然想知道这两个事物代表同一时间,那么使用DateTimeOffset. 这将包括计算机的本地日期和时间,以及日期和时间表示的与 UTC 的偏移量。
无论采用哪种方法,您都应该使用ISO8601格式进行传输和持久化,这样无论观察者的文化或时区如何,您的意思都会很清楚。在 .Net 中,这是.ToString("o")从 aDateTime或DateTimeOffset.
ISO8601 格式的 UTCDateTime如下所示:
2013-03-06T09:00:00Z
ISO8601 格式的 ADateTimeOffset如下所示:
2013-03-06T10:00:00+01:00
.Net 将此称为往返模式 - 因为它是为您描述的确切目的而设计的。
有关进一步说明DateTimeOffset- 请参阅此帖子。