有关C#DateTime / TimeZone UTC时间计算的全球问题

时间:2016-11-14 14:08:16

标签: 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}, 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

正如您所看到的,在服务器上,我得到的UTC时间比它应该的时间早1小时,它认为那天的时区应该是+4,这是错误的。此问题最终会导致很大的问题,例如为JSON序列化获取错误的日期值,因为Microsoft会根据UTC时间等效日期将日期转换为长数字。

我的问题是,我们遗失的可能性是什么。我们不会定期更新我们的服务器,但是我们安装了与此时区更新相关的更新包。它适用于某些服务器,但不适用于其他服务器。我们试图找出任何文章或更新文件来引导我们走向正确的方向,但到目前为止我们什么都没有。

-

0 个答案:

没有答案