在 NodaTime 中无法获取 Asia/Kolkata WindowsMap
Cannot get Asia/Kolkata WindowsMap in NodaTime
简而言之,我有一个.net 网络应用程序,它需要记录用户的时区信息(以便在电子邮件中发送正确的时间)。
using NodaTime.TimeZones;
var winmap = TzdbDateTimeZoneSource.Default.WindowsMapping.MapZones
.FirstOrDefault(x => x.TzdbIds.Contains(tzinfo));
if (winmap == null) throw new Exception("Invalid timezone");
野田时光 2.4.8
“Asia/Kolkata”时区似乎不存在,我不确定需要什么才能使其正常工作。有没有更好的方法来实现这个?
问题是 Windows/TZDB 映射文件 (example) 不包含“Asia/Kolkata”,它包含“Asia/Calcutta”。
在用户代码中考虑这一点相对棘手,这就是我们在 NodaTime 3.0 中引入 TzdbDateTimeZoneSource.TzdbToWindowsIds
.
的原因
更新到3.0后,您可以使用:
if (!TzdbDateTimeZoneSource.Default.TzdbToWindowsIds.TryGetValue(tzinfo, out var windowsZoneId))
{
throw new Exception($"Unmapped time zone ID '{tzinfo}'");
}
// Use windowsZoneId here
如果您真的需要坚持使用 2.4.8,您可以规范化 tzinfo
和 TzdbDateTimeZoneSource.Default.WindowsMapping.MapZones.TzdbIds
中的所有条目,但那将是通常更糟。
(从 2.4.8 到 3.0.0 的更新对于大多数用户来说应该是无缝的。这是一个重大变化主要是 由于删除了二进制序列化,我希望你不使用...)
简而言之,我有一个.net 网络应用程序,它需要记录用户的时区信息(以便在电子邮件中发送正确的时间)。
using NodaTime.TimeZones;
var winmap = TzdbDateTimeZoneSource.Default.WindowsMapping.MapZones
.FirstOrDefault(x => x.TzdbIds.Contains(tzinfo));
if (winmap == null) throw new Exception("Invalid timezone");
野田时光 2.4.8
“Asia/Kolkata”时区似乎不存在,我不确定需要什么才能使其正常工作。有没有更好的方法来实现这个?
问题是 Windows/TZDB 映射文件 (example) 不包含“Asia/Kolkata”,它包含“Asia/Calcutta”。
在用户代码中考虑这一点相对棘手,这就是我们在 NodaTime 3.0 中引入 TzdbDateTimeZoneSource.TzdbToWindowsIds
.
更新到3.0后,您可以使用:
if (!TzdbDateTimeZoneSource.Default.TzdbToWindowsIds.TryGetValue(tzinfo, out var windowsZoneId))
{
throw new Exception($"Unmapped time zone ID '{tzinfo}'");
}
// Use windowsZoneId here
如果您真的需要坚持使用 2.4.8,您可以规范化 tzinfo
和 TzdbDateTimeZoneSource.Default.WindowsMapping.MapZones.TzdbIds
中的所有条目,但那将是通常更糟。
(从 2.4.8 到 3.0.0 的更新对于大多数用户来说应该是无缝的。这是一个重大变化主要是 由于删除了二进制序列化,我希望你不使用...)