当我觉得应该返回 8.25 时,以下代码返回 9.25,我误解了什么?
(new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0))).Subtract(new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0)).Date).TotalHours
更简单地显示为:-
DateTimeOffset start = new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0));
double result = start.Subtract(start.Date).TotalHours
当在 Windows 7 PC 上以 GMT 时区(根据夏令时进行调整)运行时:-
9 月 12 日结果 = 9.25
12 月 12 日结果 = 8.25
最佳答案
问题是 DateTimeOffset.Date
属性返回未指定 Kind
的 DateTime
。当您从 DateTimeOffset
中减去它时,它会被假定为系统本地的。
您可以通过询问 UtcDateTime
并从中获取 Date
来解决此问题:
double result = start.Subtract(start.UtcDateTime.Date).TotalHours
当然,这是假设您想要的 Date
是 UTC 日期/时间所在的日期。我们不太了解您的实际要求。您可能需要考虑使用我的 Noda Time库来避免这种歧义 - 有更多类型可供选择,它允许您更清楚地指定您的意图。
关于c# - DateTimeOffset TotalHours 返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809639/