安全地将UTC日期时间转换为当地时间(基于TZ)进行计算?

Jam*_*mes 2 c# timezone datetime utc datetimeoffset

从我下面最后一个问题@乔恩飞碟双向给了我很多的帮助与(再次感谢!)

我现在想知道当它们被转换回本地日期/时间时,如何安全地处理以UTC格式存储的日期/时间.

正如乔恩在我的上一个问题中DateTimeOffset表示,使用时间代表了一个瞬间,并且没有办法预测一分钟之后当地时间会说什么.我需要能够根据这些日期/时间进行计算.

那么我如何确保何时从数据库中提取日期,将它们转换为本地日期/时间并对它们进行具体计算它们是否准确?

脚本

我的申请记录通过电子邮件发送的信息.收到电子邮件的日期/时间记录为提交时间.电子邮件是从交换中提取的.

我需要知道的是:

1)如果这些电子邮件来自不同的国家/地区,我是否只是将Recieved电子邮件的日期/时间转换为UTC格式并存储?例如Email.Received.ToUniversalTime()

Guf*_*ffa 6

不,你不能这么认为.UTC时间是完全线性的,您可以安全地对它们进行计算.一旦你将它转换为当地时间,它就不再是完全线性的.

当夏令时发生变化时,当地时间会有重叠或间隙.如果您进行的计算跨越夏令时变化,则结果将关闭一小时(如果时间变化多少,这是最常见的).

如果在将DateTime/DateTimeOffset值转换为本地时间之前进行计算,则结果将始终正确.但请注意,将值转换为本地DateTime值可能会使其不明确,如果值在夏令时变化时恰好落在重叠内,则无法判断它是第一次还是第二次确切时间发生在当天.