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

时间:2013-03-12 20:39:18

标签: nodatime

我正在尝试学习如何在我的应用程序中使用NodaTime,但是找不到很多关于如何使用这个库做某些事情的例子。

假设:

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

如何使用NodaTime解析此问题以获得

  • OffsetDateTime
  • Instant

1 个答案:

答案 0 :(得分:4)

使用纯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();