DateTimeOffset TotalHours返回不同的值

时间:2014-09-12 13:37:06

标签: c# .net datetimeoffset

以下代码返回9.25,当我觉得它应该返回8.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

在时区GMT的Windows 7 PC上运行(调整为夏令时): -

9月12日结果= 9.25

12月12日结果= 8.25

1 个答案:

答案 0 :(得分:10)

问题是DateTimeOffset.Date属性返回DateTime,其中Kind未指定。当你从DateTimeOffset中减去它时,它被认为是系统本地的。

您可以通过询问UtcDateTime并从中获取Date来解决此问题:

double result = start.Subtract(start.UtcDateTime.Date).TotalHours

当然,假设您想要的Date UTC 日期/时间落在的日期。我们对您的实际要求了解不多。您可能需要考虑使用我的Noda Time库来避免这种歧义 - 有更多类型可供选择,它可以让您更清楚地指定您的意图。