gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:03:22 25 4
gpt4 key购买 nike

我有一个输入:

  1. 时间(8:00AM)
  2. 奥尔森时区(美国/纽约)

我需要将时间转换为另一个奥尔森时区(美国/洛杉矶)

.net 或 nodatime 中进行该转换的最佳方法是什么。我基本上是在 C# 中寻找与此方法等效的方法:

  var timeInDestinationTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(CurrentSlot.Date, TimeZoneInfo.Local.Id,
room.Location.TimeZone.TimeZoneName);

但是上面的这个 .Net 方法只适用于 Windows 时区名称(我有 Olson 名称)

最佳答案

观察:

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 将假设您的意思是之后。如果您不希望出现这种行为,则必须提供一个偏移量,以便您知道所谈论的是哪个本地时间。

实际的转换 是由 ToInstant 完成的,它获取您正在谈论的 UTC 时刻,然后 InZone 正在应用它到目标区域。

关于c# - 如何将时间和奥尔森时区转换为另一个奥尔森时区的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com