gpt4 book ai didi

c# - 什么是 MapTimeZoneId 的 Noda Time 2.0 等价物?

转载 作者:太空狗 更新时间:2023-10-30 00:18:03 25 4
gpt4 key购买 nike

一段时间以来,我一直在毫无缺陷地使用以下代码:

internal static string WindowsToIana(string windowsZoneId)
{
if (windowsZoneId.Equals("UTC", StringComparison.Ordinal))
return "Etc/UTC";

var tzdbSource = NodaTime.TimeZones.TzdbDateTimeZoneSource.Default;
var tzi = TimeZoneInfo.FindSystemTimeZoneById(windowsZoneId);
if (tzi == null) return null;
var tzid = tzdbSource.MapTimeZoneId(tzi);
if (tzid == null) return null;
return tzdbSource.CanonicalIdMap[tzid];
}

将 NodaTime 升级到 2.0 版时,我现在收到一个编译时错误,提示 MapTimeZoneId 不再存在。如何让此功能再次运行?

最佳答案

目前,您需要 Noda Time 内部存在的相同代码,但不是很多:

internal static string WindowsToIana(string windowsZoneId)
{
// Avoid UTC being mapped to Etc/GMT, which is the mapping in CLDR
if (windowsZoneId == "UTC")
{
return "Etc/UTC";
}
var source = TzdbDateTimeZoneSource.Default;
string result;
// If there's no such mapping, result will be null.
source.WindowsMapping.PrimaryMapping.TryGetValue(windowsZoneId, out result);
// Canonicalize
if (result != null)
{
result = source.CanonicalIdMap[result];
}
return result;
}

注意事项:

  • 此代码将适用于无论出于何种原因不存在于您的系统中但存在于 CLDR 中的时区 ID
  • 如果这是所有您使用 Noda Time 所做的,请考虑使用 TimeZoneConverter相反
  • 如果您在非 Windows 系统上运行 .NET Core,TimeZoneInfo.Local.Id 可能已经是一个 IANA ID,因此此代码将返回 null大多数情况下。

我已经提交了 an issue处理迁移指南中未提及的事实。

关于c# - 什么是 MapTimeZoneId 的 Noda Time 2.0 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43794796/

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