DateTime + TZ -> NodaTime 转换
DateTime + TZ -> NodaTime conversion
当我查看如何将时间转换为 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() 方法,但是偏移量和时区是不同的东西,因为 TZ 可以处理夏令时。
听起来你只是想要:
var local = LocalDateTime.FromDateTime(myDateTime);
var zone = DateTimeZoneProviders.Tzdb[id];
var zoned = local.InZoneLeniently(zone);
除了:
- 您可能想编写自己的规则而不是使用
InZoneLeniently
- 如果您不确定区域 ID 是否会被 Noda Time 识别,您可能想要使用
DateTimeZoneProviders.Tzdb.GetZoneOrNull(id)
。
当我查看如何将时间转换为 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() 方法,但是偏移量和时区是不同的东西,因为 TZ 可以处理夏令时。
听起来你只是想要:
var local = LocalDateTime.FromDateTime(myDateTime);
var zone = DateTimeZoneProviders.Tzdb[id];
var zoned = local.InZoneLeniently(zone);
除了:
- 您可能想编写自己的规则而不是使用
InZoneLeniently
- 如果您不确定区域 ID 是否会被 Noda Time 识别,您可能想要使用
DateTimeZoneProviders.Tzdb.GetZoneOrNull(id)
。