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库来避免这种模糊性 - 有更多类型可供选择,它允许你更清楚地指定你的意图.