如何将一个时间和奥尔森时区转换为另一个奥尔森时区的时间?

2023-12-13

我有作为输入:

  1. 时间(上午 8:00)
  2. 奥尔森时区(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(使用前将#替换为@)

如何将一个时间和奥尔森时区转换为另一个奥尔森时区的时间? 的相关文章

随机推荐