为了保持简短和甜蜜,我有2台PC:
PC 1已关闭DST
PC 2已开启DST。
PC 1向PC 2发送一个DateTime,用于设置时间。
以上所有我都有,但我的问题是,当PC 2收到DateTime时,如何查看是否需要进行DST调整?
PC是英国的。
编辑: - 有更多细节,因为有混乱。 当PC 2从PC 1检索时间时,它会将系统的时间更改为此值,但我需要确保如果需要+/- 1小时(DTS),则在设置系统日期和时间之前应用它。
答案 0 :(得分:2)
我建议使用UTC进行传输和持久化。
另外注意不要将日期时间用作算法的关键部分 - 它只是数据。日期和时间转移并纠正自己。我看到当PC修正它的时候崩溃的应用程序:)
这是另一篇帖子,其中包含有关该主题的更多信息: Daylight saving time and time zone best practices
答案 1 :(得分:0)
您没有显示任何代码,但是您将问题标记为c#,因此我将从这个角度回答。
如果您只是需要确保在同一时刻讨论,请使用DateTime
.Kind = DateTimeKind.Utc
,例如从DateTime.UtcNow
获取。
如果你真的需要知道PC1认为它是一次,而PC2认为它是另一次,你仍然想知道这两件事代表同一时刻,那么使用DateTimeOffset
。这将包括计算机的本地日期和时间,以及日期和时间所代表的UTC偏移量。
使用任何一种方法,您都应该使用ISO8601格式进行传输和持久化,这样无论观察者的文化或时区如何,您的意思都是明确的。在.Net中,这是通过.ToString("o")
或DateTime
中的DateTimeOffset
获得的。
ISO8601格式的UTC DateTime
如下所示:
2013-03-06T09:00:00Z
ISO8601格式的DateTimeOffset
如下所示:
2013-03-06T10:00:00+01:00
.Net称之为Round Trip模式 - 因为它是为您描述的确切目的而设计的。
有关DateTimeOffset
的进一步说明,请参阅this post。