Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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#日期时间/时区UTC时间计算的全球问题_C#_Json_Datetime_Timezone_Utc - Fatal编程技术网

关于C#日期时间/时区UTC时间计算的全球问题

关于C#日期时间/时区UTC时间计算的全球问题,c#,json,datetime,timezone,utc,C#,Json,Datetime,Timezone,Utc,我来自土耳其,我们的政府决定从今年(2016年10月)开始不再改变夏令时设置。因此,已经发布了一些与此主题相关的Windows更新。但当我们试图从C#端的旧日期值获取UTC时间时,我们的一些Windows 2012 R2服务器仍然存在问题 以下是从本地PC和服务器进行日志记录的示例: var createdOn = new DateTime(2009, 8, 20, 0, 0, 0); _logger.Debug(string.Format("Field CREATED_ON: {0}, WIT

我来自土耳其,我们的政府决定从今年(2016年10月)开始不再改变夏令时设置。因此,已经发布了一些与此主题相关的Windows更新。但当我们试图从C#端的旧日期值获取UTC时间时,我们的一些Windows 2012 R2服务器仍然存在问题

以下是从本地PC和服务器进行日志记录的示例:

var createdOn = new DateTime(2009, 8, 20, 0, 0, 0);
_logger.Debug(string.Format("Field CREATED_ON: {0}, WITH-TIMEZONE-FORMAT: {1}",  createdOn, createdOn.ToString("dd.MM.yyyy HH:mm:ss tt \"GMT\"zzz")));
_logger.Debug(string.Format("UTC-DATETIME: {0}, UTC-TZ:{1}", createdOn.ToUniversalTime(), createdOn.ToUniversalTime().ToString("dd.MM.yyyy HH:mm:ss tt \"GMT\"zzz")));
在我的本地电脑上:

Field CREATED_ON: 20.08.2009 00:00:00, WITH-TIMEZONE-FORMAT: 20.08.2009 00:00:00 ÖÖ GMT+03:00
UTC-DATETIME: 19.08.2009 21:00:00, UTC-TZ:19.08.2009 21:00:00 ÖS GMT+03:00
Field CREATED_ON: 20.8.2009 00:00:00, WITH-TIMEZONE-FORMAT: 20.08.2009 00:00:00  GMT+04:00    
UTC-DATETIME: 19.8.2009 20:00:00, UTC-TZ:19.08.2009 20:00:00  GMT+04:00
在服务器上:

Field CREATED_ON: 20.08.2009 00:00:00, WITH-TIMEZONE-FORMAT: 20.08.2009 00:00:00 ÖÖ GMT+03:00
UTC-DATETIME: 19.08.2009 21:00:00, UTC-TZ:19.08.2009 21:00:00 ÖS GMT+03:00
Field CREATED_ON: 20.8.2009 00:00:00, WITH-TIMEZONE-FORMAT: 20.08.2009 00:00:00  GMT+04:00    
UTC-DATETIME: 19.8.2009 20:00:00, UTC-TZ:19.08.2009 20:00:00  GMT+04:00
如您所见,在服务器上,我比应该的时间提前1小时获得UTC时间,它认为当天的时区应该是+4,这是错误的。这个问题最终会导致大问题,比如JSON序列化的日期值错误,因为Microsoft会根据UTC时间等效值将日期转换为长数字

我的问题是,我们遗漏了什么。我们不会定期更新服务器,但我们已安装了与此时区更新相关的更新包。它在一些服务器上工作,但在其他一些服务器上不起作用。我们正试图找出任何文章或更新文档来引导我们找到正确的方向,但到目前为止,我们什么都没有得到


--

由于您根本没有提供任何代码,因此我们无法确定是什么产生了该输出。我相信如果你提供代码,会更容易帮助你。您还应该将正常工作的服务器与不认真工作的服务器进行比较-我觉得您可能错过了一些相关更新。@JonSkeet嗯,因为我只记录了DateTime值及其UTC值,所以我认为不需要代码块。但是我也添加了日志代码示例。而且,我们在两台Windows服务器上都做了相同的更改,这给了我们不同的结果。。我只是怀疑它是否也与以前的更新有关,但在尝试安装所有以前的更新之前,我正在寻求确认。您确定这两台计算机具有完全相同的时区设置吗?例如,如果您可以将示例更改为显式使用特定的
TimeZoneInfo
,这将使其更易于复制。(顺便说一句,我不认为将其作为
DateTime
记录,然后作为特定格式的
DateTime
记录有多大好处。)您确定这些是Windows Server 2012R2机器吗?如果是Windows Server 2003,则标题为“重要”的框中的警告将解释此行为。此外,您可以检查
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
下的
TzVersion
编号,查看机器是否已更新。由于您根本没有提供任何代码,因此我们无法确定是什么产生了该输出。我相信如果你提供代码,会更容易帮助你。您还应该将正常工作的服务器与不认真工作的服务器进行比较-我觉得您可能错过了一些相关更新。@JonSkeet嗯,因为我只记录了DateTime值及其UTC值,所以我认为不需要代码块。但是我也添加了日志代码示例。而且,我们在两台Windows服务器上都做了相同的更改,这给了我们不同的结果。。我只是怀疑它是否也与以前的更新有关,但在尝试安装所有以前的更新之前,我正在寻求确认。您确定这两台计算机具有完全相同的时区设置吗?例如,如果您可以将示例更改为显式使用特定的
TimeZoneInfo
,这将使其更易于复制。(顺便说一句,我不认为将其作为
DateTime
记录,然后作为特定格式的
DateTime
记录有多大好处。)您确定这些是Windows Server 2012R2机器吗?如果是Windows Server 2003,则标题为“重要”的框中的警告将解释此行为。此外,您可以检查
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
下的
TzVersion
编号,查看机器是否已更新。