【问题标题】:How do you parse a date and time string with offset using NodaTime?如何使用 NodaTime 解析带有偏移量的日期和时间字符串?
【发布时间】:2013-03-13 07:06:00
【问题描述】:

我正在尝试学习如何在我的应用程序中使用 NodaTime,但找不到很多关于如何使用此库执行某些操作的示例。

给定:

  • "2012/08/30 17:45:00" 的日期/时间文本
  • 格式字符串为"yyyy/MM/dd HH:mm:ss"
  • 与 UTC 的日期/时间偏移量是 -5

我如何用 NodaTime 解析这个来得到一个

  • OffsetDateTime?
  • Instant?

【问题讨论】:

    标签: nodatime


    【解决方案1】:

    使用纯 NodaTime 代码,目前没有针对 OffsetDateTime 的直接解析器。请参阅documented limitations。但是,您可以通过分别解析 LocalDateTimeOffset 来构造一个:

    var ldt = LocalDateTimePattern.CreateWithInvariantCulture("yyyy/MM/dd HH:mm:ss")
                                  .Parse("2012/08/30 17:45:00")
                                  .Value;
    
    var o = OffsetPattern.GeneralInvariantPattern
                         .Parse("-05")
                         .Value;
    
    var odt = new OffsetDateTime(ldt, o);
    

    Instant 有一个类似的解析器,但它需要 UTC 时间 - 而不是偏移量。

    您也可以只使用 BCL 中 DateTimeOffset 的文本解析,然后执行:

    var odt = OffsetDateTime.FromDateTimeOffset(dto);
    

    无论哪种方式,一旦您拥有OffsetDateTime,它就可以转换为Instant

    var instant = odt.ToInstant();
    

    【讨论】:

    • 这就是我要找的。我不清楚如何使用 LocalDateTimePattern 进行解析,也找不到示例。
    • 还意识到我刚刚从解析结果中获取了.Value。您可能需要先检查结果是否有效。
    • 在我的情况下 .GetValueOrThrow() 是合适的,但感谢您的提醒。
    • 需要注意的一点:1.2 版基本上都是关于文本的。所以它肯定会做到这一点。哦,如果偏移量总是-5,我会使用Offset.FromHours 而不是解析它:)
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多