3

为了保持简短和甜蜜,我有 2 台 PC:

PC 1 已关闭夏令时

PC 2 已打开 DST。

PC 1 向 PC 2 发送一个 DateTime,它需要并使用它来设置它的时间。

以上所有我都有,但我的问题是,当 PC 2 收到 DateTime 时,我如何检查它是否需要 DST 调整?

个人电脑是英国的。

编辑:- 更多细节以防有混淆。当 PC 2 从 PC 1 检索时间时,它会将系统时间更改为此值,但我需要确保如果需要 +/- 1 小时 (DTS),则在设置系统日期和时间之前应用它。

4

2 回答 2

2

我建议使用 UTC 进行传输和持久性。

还要注意不要将日期时间用作算法的关键部分——它只是数据。日期和时间会发生变化并自行纠正。我见过应用程序在 PC 纠正它的时间时崩溃 :)

这是另一篇包含有关该主题的更多信息的帖子: 夏令时和时区最佳实践

于 2013-03-06T16:09:28.907 回答
1

您没有显示任何代码,但您将问题标记为,所以我将从这个角度回答。

如果您只需要确保您谈论的是同一时刻,请使用DateTimewith .Kind = DateTimeKind.Utc,例如 is 获得 from DateTime.UtcNow

如果您确实需要知道 PC1 认为这是一次,而 PC2 认为是另一次,并且您仍然想知道这两个事物代表同一时间,那么使用DateTimeOffset. 这将包括计算机的本地日期和时间,以及日期和时间表示的与 UTC 的偏移量。

无论采用哪种方法,您都应该使用ISO8601格式进行传输和持久化,这样无论观察者的文化或时区如何,您的意思都会很清楚。在 .Net 中,这是.ToString("o")从 aDateTimeDateTimeOffset.

ISO8601 格式的 UTCDateTime如下所示:

2013-03-06T09:00:00Z

ISO8601 格式的 ADateTimeOffset如下所示:

2013-03-06T10:00:00+01:00

.Net 将此称为往返模式 - 因为它是为您描述的确切目的而设计的。

有关进一步说明DateTimeOffset- 请参阅此帖子

于 2013-03-06T16:44:57.570 回答