简单地说,我有一个点网络应用程序,它需要记录用户的时区信息(为了发送正确的时间内电子邮件)。
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
“亚洲/加尔各答”时区似乎并不存在,我不确定需要什么才能使它发挥作用。是否有更好的方法来实现这一点?
发布于 2020-09-24 10:46:57
问题是,Windows/TZDB映射文件(示例)不包含"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之间的更新对大多数用户来说应该是无缝的。这是一个重大变化,主要是因为删除了二进制序列化,我希望您没有使用.)
https://stackoverflow.com/questions/64043909
复制相似问题