c# - DateTimeOffset TotalHours 返回不同的值

标签 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,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

最佳答案

问题是 DateTimeOffset.Date属性返回未指定 KindDateTime。当您从 DateTimeOffset 中减去它时,它会被假定为系统本地的。

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

double result = start.Subtract(start.UtcDateTime.Date).TotalHours

当然,这是假设您想要的 DateUTC 日期/时间所在的日期。我们不太了解您的实际要求。您可能需要考虑使用我的 Noda Time库来避免这种歧义 - 有更多类型可供选择,它允许您更清楚地指定您的意图。

关于c# - DateTimeOffset TotalHours 返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809639/

相关文章:

c# - 访问 Win32_OperatingSystem 的属性

.net - 防止动态列名中的 SQL 注入(inject)

datetime - 如何使用NodaTime保存时间戳?

javascript - 返回倒数计时器的下一个本地化日期

java - Java 8 的新 Java Date Time API 是否处理 DST?

c# - 有时想要序列化 ​​Json 包括 [JsonIgnore]

c# - TransactionScope 实现如何工作?需要什么数据库支持?

c# - Ultra Numeric Editor 仅将默认设置为最多 2 位小数

c# - 使 ListView 在垂直方向上可滚动

.net - 使用 TLS 1.2 连接