【发布时间】:2020-09-24 09:51:21
【问题描述】:
简单地说,我有一个 dot net 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
“亚洲/加尔各答”时区似乎不存在,我不确定需要什么才能使其正常工作。有没有更好的方法来实现这一点?
【问题讨论】:
-
只是为了澄清 - 这是野田时间吗?它看起来像......在这种情况下,我建议添加正确的标签。如果是的话,我怀疑这里重要的是野田时间的版本。它应该与系统时区数据库无关。
-
已更新,是的 Nodatime。
-
对。我怀疑这是一个问题,您实际上在不同平台上使用了不同版本的 Noda Time(因此也使用了不同的数据)。请在本地和 Azure 上登录
TzdbDateTimeZoneSource.Default.VersionId,并更新问题。 (同时登录tzinfo以检查您是否真的在两种情况下检查相同的东西 - 我们不知道该值来自哪里。)一旦到位,我怀疑我将能够回答。 -
感谢@JonSkeet 的帮助。我假设部署的版本将与我在本地使用的版本相同,因为我在本地构建项目并简单地将其部署到 azure - 它怎么可能不同? (还没有使用任何中间人机器人,CI 的东西)这个问题的原因是因为我在日志中看到当用户尝试将他们的时区更新为此时出现异常。我有一个使用
Asia/Kolkata运行此功能的单元测试,它在本地成功。它适用于所有其他时区(到目前为止,我的用户已经注册了)。 -
我刚刚仔细检查了我的测试,发现有问题,我会尽快回复,谢谢
标签: .net-core timezone nodatime