将DateTime调整为DST

时间:2013-03-06 16:05:57

标签: c# datetime timezone dst datetimeoffset

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

  

PC 1已关闭DST

     

PC 2已开启DST。

     

PC 1向PC 2发送一个DateTime,用于设置时间。

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

PC是英国的。

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

2 个答案:

答案 0 :(得分:2)

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

另外注意不要将日期时间用作算法的关键部分 - 它只是数据。日期和时间转移并纠正自己。我看到当PC修正它的时候崩溃的应用程序:)

这是另一篇帖子,其中包含有关该主题的更多信息: Daylight saving time and time zone best practices

答案 1 :(得分:0)

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

如果您只是需要确保在同一时刻讨论,请使用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