如何解决在NodaTime中无法获得Asia / Kolkata WindowsMap
简单地说,我有一个点网Web应用程序,它需要记录用户的时区信息(以便在电子邮件中发送正确的时间)。
using NodaTime.TimeZones;
var winmap = TzdbDateTimeZonesource.Default.WindowsMapping.MapZones
.FirstOrDefault(x => x.TzdbIds.Contains(tzinfo));
if (winmap == null) throw new Exception("Invalid timezone");
NodaTime 2.4.8
“亚洲/加尔各答”时区似乎不存在,而且我不确定要使其工作需要什么。有没有更好的方法来实现这一目标?
解决方法
问题在于Windows / TZDB映射文件(example)不包含“亚洲/加尔各答”,而包含“亚洲/加尔各答”。
在用户代码中对此进行解释比较棘手,这就是为什么在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的更新应该是无缝的。由于删除了二进制序列化,这是主要的重大更改,我希望您不要使用... )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。