gpt4 book ai didi

c# - IDateTimeZoneSource.MapTimeZoneId 的 Noda 时区问题

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

我正在尝试将 Windows 转换为 IANA 时区,下面是大部分时间都有效的代码。但是,当Windows时间id =“特克斯和凯科斯群岛”时,下面的代码返回NULL。我正在使用NODATIME版本1.3.1

    Public Function ConvertID_WindowsToIana(strWindowsZoneID As String) As String
If strWindowsZoneID.Equals("UTC", StringComparison.OrdinalIgnoreCase) Then
Return "Etc/UTC"
End If

Dim tzdbSource = NodaTime.TimeZones.TzdbDateTimeZoneSource.[Default]
Dim tzi = TimeZoneInfo.MapTimeZoneId(strWindowsZoneID)
Return tzdbSource.CanonicalIdMap(tzi)
End Function

这里,当 tzi = -4:00 特克斯和凯科斯群岛时,在这种情况下返回为 NULL。

现在,当我更新到版本 2.2.3 时,认为它会修复这些问题,但根据文档

enter image description here

现在该函数将“当前字符串的位置”作为参数。

所以我的代码如下所示:

  Public Function ConvertID_WindowsToIana(strWindowsZoneID As String) As String

Dim tzi = TimeZoneInfo.FindSystemTimeZoneById(strWindowsZoneID)
Dim tzid = tzdbSource.GetSystemDefaultId(WHAT TO PUT HERE)
// some logic
End Function

问题 1:为什么我的第一个代码不适用于“特克斯和凯科斯群岛”。

问题 2:我更新了,认为它会解决该问题,但现在该功能已消失并被替换,我不知道该使用什么。请帮助我。

P.S:对于东部和许多其他时区,第一个代码片段工作正常。

最佳答案

GetSystemDefaultId 不会取代 MapTimeZoneId 的所有功能 - 您不想在此处调用它。

相反,请使用 tzdbSource.WindowsMapping 获取 WindowsZones,然后您可以使用它来查找 TZDB ID。这是一些示例代码:

using System;
using NodaTime.TimeZones;

public class Test
{
static void Main()
{
var source = TzdbDateTimeZoneSource.Default;

string windowsId = "Turks And Caicos Standard Time";

var mapping = source.WindowsMapping.PrimaryMapping;
if (mapping.TryGetValue(windowsId, out string tzdbId))
{
Console.WriteLine($"Mapped to {tzdbId}");
}
else
{
Console.WriteLine("Not found");
}
}
}

另一种方法是使用 Matt Johnson 的 TimeZoneConverter包,这可以让事情变得更加简单。如果您在其他地方使用 Noda Time,那么坚持使用 Noda Time 可能是有意义的,但如果您使用它进行时区 ID 转换,TimeZoneConverter 是更好的选择。

至于为什么“特克斯和凯科斯”不起作用 - 我假设您的意思是“特克斯和凯科斯标准时间”作为 ID。这仅在 CLDR v30 中引入到 CLDR 映射数据中,该版本比 1.3.1 晚一年多发布。如果您更新到 1.3.5 或 1.4.2,这两个版本都应该没问题。

关于c# - IDateTimeZoneSource.MapTimeZoneId 的 Noda 时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718169/

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