DateTime + TZ - > NodaTime转换

时间:2018-04-26 16:45:35

标签: c# nodatime

当我看看如何将时间转换为NodaTime时,我发现很多帖子,但没有一个直接的答案来解释我的需要。

我有:

- A DateTime object (DateTime myDateTime)
- An Olson timezone (var TZ = "America/Los_Angeles")

我想:

- A ZonedDateTime object (ZonedDateTime myZonedDateTime)

理想情况下,我正在寻找一些帮助:

var myZonedDateTime = ZonedDateTime.From(myDateTime, TZ);

但我看到的所有样本都将日期转换为字符串然后解析字符串,这看起来很奇怪。

有一个ZonedDateTime.FromDateTimeOffset()方法,但偏移量和TimeZone是不同的东西,因为TZ可以处理夏令时。

1 个答案:

答案 0 :(得分:11)

听起来你只是想要:

var local = LocalDateTime.FromDateTime(myDateTime);
var zone = DateTimeZoneProviders.Tzdb[id];
var zoned = local.InZoneLeniently(zone);

除了:

  • 您可能希望编写自己的规则,而不是使用InZoneLeniently
  • 如果您不确定Noda Time是否会识别区域ID,则可能需要使用DateTimeZoneProviders.Tzdb.GetZoneOrNull(id)