DateTimeOffset TotalHours返回不同的值

Old*_*art 4 .net c# datetimeoffset

当我觉得它应该返回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
Run Code Online (Sandbox Code Playgroud)

更简单地显示为: -

DateTimeOffset start = new DateTimeOffset(2014,09,04,08,15,00,new TimeSpan(0,0,0));
double result = start.Subtract(start.Date).TotalHours
Run Code Online (Sandbox Code Playgroud)

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

9月12日结果= 9.25

12月12日结果= 8.25

Jon*_*eet 10

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

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

double result = start.Subtract(start.UtcDateTime.Date).TotalHours
Run Code Online (Sandbox Code Playgroud)

当然,假设Date您想要的是UTC日期/时间的下降日期.我们对您的实际要求知之甚少.你可能想考虑使用我的Noda Time库来避免这种模糊性 - 有更多类型可供选择,它允许你更清楚地指定你的意图.