我假设在减去2个日期时,框架会检查他们的时区并进行适当的转换。
我用这段代码测试了它:
-00:00:00.0020002
-00:00:00.0020001
01:59:59.9989999
输出:
DateTime.Now - DateTime.UtcNow
令我惊讶的是,DateTime.UtcNow
没有自动进行适当的转换。与此同时,DateTime.UtcNow.ToUniversalTime()
与ToUniversalTime()
相同,因此显然有一些内部标记表示时区。
这是否正确,即使信息已经存在,该框架是否也不会自动执行适当的时区转换?如果是,那么对于UTC和非UTC日期时间是否适用ToUniversalTime()
安全,即plata
不会错误地纠正已经的UTC日期时间?
答案 0 :(得分:6)
类型System.DateTime
不包含时区信息,只有.Kind
属性指定它是本地还是UTC。但在.NET 2.0之前,甚至没有.Kind
属性。
当您减去(或执行其他算术,如==
或>
时)两个DateTime
值,它们的"种类"根本没有考虑。仅考虑刻度数。这在no kinds existed时提供与.NET 1.1的兼容性。
您要求(并期望)的功能是更新更丰富的type System.DateTimeOffset
。特别是,如果你进行减法DateTimeOffset.Now - DateTimeOffset.UtcNow
,你会得到你想要的结果。 DateTimeOffset
结构没有本地/ UTC标志;相反,它包含整个时区,例如您所在地区的+02:00。
答案 1 :(得分:0)
如果日期已经是UTC,则框架不对日期做任何事情:
for