如何使用 NodaTime 解析带有偏移量的日期和时间字符串?

Dan*_*ter 4 nodatime

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

鉴于:

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

我如何用 NodaTime 解析它以获得

  • OffsetDateTime
  • Instant

Mat*_*int 5

使用纯 NodaTime 代码,目前没有直接解析OffsetDateTime. 请参阅记录的限制LocalDateTime但是,您可以通过分别解析 a和 an来构造一个Offset

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);
Run Code Online (Sandbox Code Playgroud)

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

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

var odt = OffsetDateTime.FromDateTimeOffset(dto);
Run Code Online (Sandbox Code Playgroud)

不管怎样,一旦你有了一个OffsetDateTime,它就可以转换为一个Instant

var instant = odt.ToInstant();
Run Code Online (Sandbox Code Playgroud)