首页 > 解决方案 > DateTime + TZ -> 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 可以处理夏令时。

标签: c#nodatime

解决方案


听起来你只是想要:

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

除了:

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

推荐阅读