我有作为输入:
- 时间(上午 8:00)
- 奥尔森时区(America/New_York)
我需要将时间转换为另一个奥尔森时区(美国/洛杉矶)
.net 或 nodatime 中进行该转换的最佳方法是什么?我基本上是在 C# 中寻找与此方法等效的方法:
var timeInDestinationTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(CurrentSlot.Date, TimeZoneInfo.Local.Id,
room.Location.TimeZone.TimeZoneName);
但上面的 .Net 方法仅适用于 Windows 时区名称(并且我有 Olson 名称)
Observe:
var tzdb = DateTimeZoneProviders.Tzdb;
var zone1 = tzdb["America/New_York"];
var ldt1 = new LocalDateTime(2013, 3, 4, 8, 0); // March 4th, 2013 - 8:00 AM
var zdt1 = zone1.AtLeniently(ldt1);
var zone2 = tzdb["America/Los_Angeles"];
var zdt2 = zdt1.ToInstant().InZone(zone2);
var ldt2 = zdt2.LocalDateTime;
请注意调用AtLeniently
- 那是因为你没有足够的信息来绝对确定你所谈论的时刻。例如,如果您正在谈论 DST 回退过渡当天的凌晨 1:30,您将不知道您是在谈论过渡之前还是之后。AtLeniently
会做出你想要的假设after。如果您不希望出现这种行为,则必须提供偏移量,以便您知道您正在谈论的是哪个当地时间。
实际上转换正在由ToInstant
这是获取你正在谈论的 UTC 时刻,然后InZone
即将其应用到目标区域。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)