为了简洁明了,我有两台电脑:
PC 1已关闭夏令时
PC 2已开启夏令时。
PC 1发送一个DateTime给PC 2,它使用这个DateTime来设置它的时间。
以上我都有,但我的问题是,当PC 2收到日期时间我怎么能检查,看看它是否需要夏令时调整?
PC是英国的。
编辑:-多一点细节以防混淆。当PC 2从PC 1检索时间时,它会将系统时间更改为此值,但我需要确保如果需要+/- 1小时(DTS),则在设置系统日期和时间之前应用它。
我建议使用UTC进行传输和持久化。
还要注意不要将日期时间作为算法的关键部分-它只是数据。日期和时间会自动移动和修正。我曾见过一些应用程序在PC修复时崩溃:)
这是另一篇关于这个话题的更多信息:夏令时和时区最佳实践
你没有显示任何代码,但你把你的问题标记为c#,所以我将从这个角度回答。
如果你只是需要确保你谈论的是同一时刻,那么使用DateTime
和.Kind = DateTimeKind.Utc
,例如从DateTime.UtcNow
得到的。
如果您确实需要知道PC1认为它是一次而PC2认为它是另一次,并且您仍然想知道这两个东西代表同一时刻,那么使用DateTimeOffset
。这将包括计算机的本地日期和时间,以及日期和时间表示的与UTC的偏移量。
DateTime
或DateTimeOffset
中获得的.ToString("o")
。
ISO8601格式的UTC DateTime
看起来像这样:
2013-03-06T09:00:00Z
ISO8601格式的DateTimeOffset
看起来像这样:
2013-03-06T10:00:00+01:00
。Net将这种模式称为往返模式——因为它正是为您所描述的目的而设计的。
有关DateTimeOffset
的进一步说明-请参阅这篇文章