Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTimeOffset TotalHours返回不同的值_C#_.net_Datetimeoffset - Fatal编程技术网

C# DateTimeOffset TotalHours返回不同的值

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,

下面的代码在我觉得应该返回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,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
,以实现持久性。