【问题标题】:DateTimeOffset, not clear understandingDateTimeOffset,不清楚的理解
【发布时间】:2015-02-27 20:18:39
【问题描述】:

我阅读了有关 DateTimeOffset、属性 DateTime 的文档。

https://msdn.microsoft.com/en-us/library/system.datetimeoffset.datetime(v=vs.110).aspx

DateTime 属性不受 Offset 值的影响 财产。此属性返回日期和时间组件 一个 DateTimeOffset 对象,这使得它对执行很有用 DateTimeOffset 到 DateTime 的转换。例如,如果 DateTimeOffset 对象的日期和时间值为“1/12/07 4:01pm + 7:30”,属性返回日期“1/12/07 4:01pm”。

我有 +2 GMT 时区并尝试以下代码:

    var dateString = "2012-03-01 00:00:00-23:00";
    var birthDay = DateTime.Parse(dateString);
    DateTimeOffset dtOffset = new DateTimeOffset(birthDay);

然后我查看 dtOffset 对象的属性 DateTime 并查看 {3/2/2012 1:00:00 AM} 值。 UtcDateTime 具有 {3/1/2012 11:00:00 PM} 值,LocalDateTime 具有 {3/2/2012 1:00:00 AM} 值。因此,DateTimeOffset 实例的属性 DateTime 具有带偏移量的 DateTime。我哪里错了?

【问题讨论】:

    标签: c# date datetime datetimeoffset


    【解决方案1】:

    DateTimeOffset 确实应该称为 ADateTimeWithAnOffset,因为它有两个属性——您提供的 DateTime 和 Offset。这使它对转换有用,但不会转换任何东西本身。

    From the docs...DateTimeOffset 结构包括一个 DateTime 值以及一个 Offset 属性,该属性定义当前 DateTimeOffset 实例的日期和时间与协调世界时 (UTC) 之间的差异。

    您的时间很有趣,不是因为 DateTimeOffset,而是因为您的初始字符串格式。一旦您将偏移量添加到字符串的发送中,它就会在创建基础 DateTime 时考虑您的本地时间偏移量。在我的时区,即 UCT-5 中,会发生这种情况...

    Console.WriteLine(DateTime.Parse( "2012-03-01"));
    3/1/2012 12:00:00 AM
    
    Console.WriteLine(DateTime.Parse("2012-03-01  00:00:00-23:00"));
    3/1/2012 6:00:00 PM
    

    如果您检查底层 DateTime 上的 Kind 属性,您将看到它是本地的,只要您从带有偏移量的字符串创建它。

    【讨论】:

    • 是的,但是为什么在上面的示例中我的 DateTime 受到影响? "dateString" 有 '2012-03-01' 日期,为什么 DateTimeOffset 转换它会影响我的当地时间?
    • 更新了讨论时间偏移的答案。
    【解决方案2】:

    我认为您错过的是 UtcDateTime 和 LocalDateTime 实际上是转换。因此,如果您引用这两个属性,则您要求的是转换后的值。因此,他们为您提供的值与“DateTime 属性不受 Offset 属性值影响”的说法并不矛盾。

    UtcDateTime 使用偏移量将 DateTime 属性的值转换为 UTC(它将 23 小时添加到 DateTime 部分)。

    LocalDateTime 根据您的 Windows 时区设置(必须是 UTC-1?)将 DateTime 属性的值转换为您的本地时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2016-02-29
      • 1970-01-01
      • 2013-02-28
      相关资源
      最近更新 更多