C# DateTimeOffset TotalHours返回不同的值
下面的代码在我觉得应该返回8.25时返回9.25,我误解了什么C# DateTimeOffset TotalHours返回不同的值,c#,.net,datetimeoffset,C#,.net,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 更简单地说,如下所示:- DateTimeOffset start = new DateTimeOffset(2014,09,04,08,
(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问题是属性返回的DateTime
类型为未指定。然后,当您从日期时间偏移量中减去它时,它被假定为系统本地
您可以通过询问UtcDateTime
来解决此问题,并从中获取日期
:
double result = start.Subtract(start.UtcDateTime.Date).TotalHours
当然,这是假设您想要的Date
是UTC日期/时间所在的日期。我们不太了解你们的实际需求。你可能想考虑使用我的库来避免这种歧义——尽管有更多的类型可供选择,它可以让你更清楚地指定你的意图。由于开发和生产在不同的时区。我在去年多次阅读了野田佳彦时间-这可能是通过Entity Framework 5 DateTimeOffset类型询问与SQL server DateTimeOffset(7)兼容性的正确时机。我是否会一直转换为DateTimeOffset或从DateTimeOffset转换为DateTimeOffset,从而依赖于创建一个C代码演化模式,而不是将我的设计意图嵌入到POCO对象中?@Oldfart:恐怕EF不支持直接使用自定义类型。但你不需要“一直”这样做——通常你只需要创建一个我相信的“好友属性”(我自己不是EF人)。请参阅-然后大部分代码都可以使用Noda-Time,它将从OffsetDateTime
转换为DateTimeOffset
,以实现持久性。