以下代码返回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
答案 0 :(得分:10)
问题是DateTimeOffset.Date
属性返回DateTime
,其中Kind
未指定。当你从DateTimeOffset
中减去它时,它被认为是系统本地的。
您可以通过询问UtcDateTime
并从中获取Date
来解决此问题:
double result = start.Subtract(start.UtcDateTime.Date).TotalHours
当然,假设您想要的Date
是 UTC 日期/时间落在的日期。我们对您的实际要求了解不多。您可能需要考虑使用我的Noda Time库来避免这种歧义 - 有更多类型可供选择,它可以让您更清楚地指定您的意图。