如何使用NodaTime.Tzdb获取当前时区ID?
解决NodaTime.Tzdb获取当前时区ID不符的问题
确认系统时区设置
DateTimeZoneProviders.Tzdb.GetSystemDefault()是基于系统当前时区映射到Tzdb时区ID的。先检查你的系统实际时区是否为哥本哈根时区,若系统时区的偏移/规则与Paris时区一致,Tzdb可能返回别名而非你预期的ID。检查Tzdb版本
不同版本的NodaTime.Tzdb包包含的时区数据可能存在差异,旧版本可能有映射偏差。确保你使用的是最新版本的NodaTime NuGet包,时区数据更新后这类问题可能被修复。验证时区映射与别名
用以下代码查看系统时区对应的Tzdb信息及所有别名:var systemTimeZone = TimeZoneInfo.Local; var tzdbProvider = DateTimeZoneProviders.Tzdb; var mappedZone = tzdbProvider.GetZoneOrNull(systemTimeZone.Id); if (mappedZone != null) { Console.WriteLine($"当前映射的Tzdb ID: {mappedZone.Id}"); Console.WriteLine("该时区的所有别名:"); foreach (var alias in mappedZone.Aliases) { Console.WriteLine($"- {alias}"); } }如果Europe/Copenhagen是该时区的别名,你可以直接通过这个别名获取对应时区:
var copenhagenZone = DateTimeZoneProviders.Tzdb["Europe/Copenhagen"];强制指定目标时区
若你明确需要Europe/Copenhagen时区,无需依赖系统默认,直接通过ID获取即可:var targetZone = DateTimeZoneProviders.Tzdb["Europe/Copenhagen"];
内容的提问来源于stack exchange,提问作者Qasim Raza
相关产品推荐
相关产品推荐

