首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获得亚洲/加尔各答WindowsMap in NodaTime

无法获得亚洲/加尔各答WindowsMap in NodaTime
EN

Stack Overflow用户
提问于 2020-09-24 09:51:21
回答 1查看 143关注 0票数 0

简单地说,我有一个点网络应用程序,它需要记录用户的时区信息(为了发送正确的时间内电子邮件)。

代码语言:javascript
复制
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

WindowsMapping

“亚洲/加尔各答”时区似乎并不存在,我不确定需要什么才能使它发挥作用。是否有更好的方法来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 10:46:57

问题是,Windows/TZDB映射文件(示例)不包含"Asia/Kolkata",而是包含"Asia/Calcutta“。

在用户代码中解释这一点是比较棘手的,这就是为什么在NodaTime 3.0中我们引入了TzdbDateTimeZoneSource.TzdbToWindowsIds

更新到3.0之后,可以使用:

代码语言:javascript
复制
if (!TzdbDateTimeZoneSource.Default.TzdbToWindowsIds.TryGetValue(tzinfo, out var windowsZoneId))
{
   throw new Exception($"Unmapped time zone ID '{tzinfo}'");
}
// Use windowsZoneId here

如果您确实需要继续使用2.4.8,您可以同时规范化tzinfoTzdbDateTimeZoneSource.Default.WindowsMapping.MapZones.TzdbIds中的所有条目,但这通常会更糟。

( 2.4.8至3.0.0之间的更新对大多数用户来说应该是无缝的。这是一个重大变化,主要是因为删除了二进制序列化,我希望您没有使用.)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64043909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档