调整DateTime为夏令时

本文关键字:夏令时 DateTime 调整 | 更新日期: 2023-09-27 18:02:40

为了简洁明了,我有两台电脑:

PC 1已关闭夏令时

PC 2已开启夏令时。

PC 1发送一个DateTime给PC 2,它使用这个DateTime来设置它的时间。

以上我都有,但我的问题是,当PC 2收到日期时间我怎么能检查,看看它是否需要夏令时调整?

PC是英国的。

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

调整DateTime为夏令时

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

还要注意不要将日期时间作为算法的关键部分-它只是数据。日期和时间会自动移动和修正。我曾见过一些应用程序在PC修复时崩溃:)

这是另一篇关于这个话题的更多信息:夏令时和时区最佳实践

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

如果你只是需要确保你谈论的是同一时刻,那么使用DateTime.Kind = DateTimeKind.Utc,例如从DateTime.UtcNow得到的。

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

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

ISO8601格式的UTC DateTime看起来像这样:

2013-03-06T09:00:00Z

ISO8601格式的DateTimeOffset看起来像这样:

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

。Net将这种模式称为往返模式——因为它正是为您所描述的目的而设计的。

有关DateTimeOffset的进一步说明-请参阅这篇文章