我正在尝试找出如何在.NET中获取时区或时区信息对象,并使用它来将MySQL数据库中的所有日期从UTC转换为本地用户正确时区。 我正在构建一个桌面应用程序。 我计划使用内置的Convert_TZ函数,但我从这些对象返回的信息与内置方法不一致。
我找到了这篇文章(http://codeofmatt.com/2014/04/07/working-with-time-zone-names-in-net/),它将时区信息对象设置为更好的显示格式,但它仍然不匹配。
我对使用时区对象非常陌生。 如果有更好的方法来获取当前时区并且更容易使用,那么我会尝试一下。
MySQL使用IANA时区。 您可以在此处阅读有关MySQL的时区支持的信息。 您可以在时区标签 wiki 中阅读有关不同类型的时区的信息。
Windows 上的 .NET 适用于Microsoft Windows 时区。 这是通过TimeZoneInfo
对象完成的。 较旧的TimeZone
对象也在 .NET Framework 中,但不应再使用。
要在 .NET 中使用 IANA 时区而不是 Windows 时区,您可以使用 Noda 时间库。 使用 Noda Time,您可以像这样获取系统的本地 IANA 时区:
string tz = DateTimeZoneProviders.Tzdb.GetSystemDefault().Id;
请注意,Linux 或 macOS 上的 .NET 已经将 IANA 时区与 TimeZoneInfo
对象一起使用,因此 Noda Time 是可选的。
如果您已经在使用 Windows 时区,则可以使用此处描述的方法将其转换为 IANA 时区。
另请注意,在此答案的先前版本中,我建议不要在Windows上使用MySQL的内置时区支持,因为它们没有使时区数据保持最新。 此问题已报告给 MySQL 团队,并已得到修复。 如果您在Windows上运行MySQL,则可以在此处找到最新的时区数据文件。