Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将日期时间调整为DST_C#_Datetime_Timezone_Dst_Datetimeoffset - Fatal编程技术网

C# 将日期时间调整为DST

C# 将日期时间调整为DST,c#,datetime,timezone,dst,datetimeoffset,C#,Datetime,Timezone,Dst,Datetimeoffset,为了保持简短和甜蜜,我有两台电脑: PC 1已关闭DST PC 2已打开DST PC 1向PC 2发送日期时间,并使用该日期时间设置时间 所有这些我都准备好了,但我的问题是,当PC 2收到日期时间时,我如何检查它是否需要DST调整 个人电脑位于英国 编辑:-更多细节,以防混淆。 当PC 2从PC 1检索时间时,它会将系统时间更改为该值,但我需要确保如果需要+/-1小时(DTS),则在设置系统日期和时间之前应用该时间。我建议使用UTC进行传输和持久性 还要注意不要将日期时间作为算法的关键部分,因为

为了保持简短和甜蜜,我有两台电脑:

PC 1已关闭DST

PC 2已打开DST

PC 1向PC 2发送日期时间,并使用该日期时间设置时间

所有这些我都准备好了,但我的问题是,当PC 2收到日期时间时,我如何检查它是否需要DST调整

个人电脑位于英国

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

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

还要注意不要将日期时间作为算法的关键部分,因为它只是数据。日期和时间转换并自行更正。我见过应用程序在电脑修正时间时崩溃:)

下面是另一篇关于这个主题的文章:

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

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

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

无论采用哪种方法,您都应该使用传输和持久化的格式,这样无论观察者的文化或时区如何,您的意思都是明确的。在.Net中,这是通过
.ToString(“o”)
DateTime
DateTimeOffset
获得的

ISO8601格式的UTC
DateTime
如下所示:

2013-03-06T09:00:00Z
2013-03-06T10:00:00+01:00
ISO8601格式的
DateTimeOffset
如下所示:

2013-03-06T09:00:00Z
2013-03-06T10:00:00+01:00
.Net将其称为模式,因为它是为您描述的确切目的而设计的


有关
DateTimeOffset
的进一步说明,请参阅。

使用UTC进行持久性和传输重新编辑:您仍然可以发送UTC,对吗?当UTC时间发送到另一台电脑时,它知道它的时区,因此可以从众所周知的UTC传输转换,应用它的时区偏移量并更新时间。@bryanmac好的,让我们假设我接收UTC作为日期时间对象,我是用它来设置系统时间还是将其转换回,我猜,GMT时间?