如何从 .Net TimeZone 转换为 MySQL TimeZone

问题描述 投票:0回答:1

我正在尝试找出如何获取 .NET 中的

TimeZone
TimeZoneInfo
对象,并使用它将 MySQL 数据库中的所有日期从 UTC 转换为本地用户正确时区。我正在构建一个桌面应用程序。我计划使用内置
Convert_TZ
函数,但从这些对象返回的信息与内置方法不符。

我发现这篇文章(http://codeofmatt.com/2014/04/07/working-with-time-zone-names-in-net/)将时区信息对象设置为更好的显示格式但它仍然不匹配。

我对使用

TimeZone
对象非常陌生。 如果有更好的方法来获取当前时区并且更易于使用,那么我会尝试。

mysql .net timezone desktop-application
1个回答
3
投票

MySQL 使用 IANA 时区。 您可以在此处阅读MySQL 的时区支持。 您可以在 时区标签 wiki 中了解不同类型的时区。

Windows 上的 .NET 适用于 Microsoft Windows 时区。 这是通过

TimeZoneInfo

 对象完成的。  旧的 
TimeZone
 对象也在 .NET Framework 中,但不应再使用。

要在 .NET 中使用 IANA 时区而不是 Windows 时区,您可以使用

Noda Time 库。 使用 Noda Time,您可以获取系统本地 IANA 时区,如下所示:

string tz = DateTimeZoneProviders.Tzdb.GetSystemDefault().Id;
请注意,Linux 或 macOS 上的 .NET 已将 IANA 时区与 

TimeZoneInfo

 对象一起使用,因此 Noda 时间是可选的。

如果您已经在使用 Windows 时区,您可以将其转换为 IANA 时区,

使用此处描述的方法

还要注意,在这个答案的先前版本中,我建议不要在 Windows 上使用 MySQL 的内置时区支持,因为它们没有保持时区数据最新。 此问题已报告给 MySQL 团队

此处,并且已得到修复。 如果您在 Windows 上运行 MySQL,您将在此处找到最新的时区数据文件。

© www.soinside.com 2019 - 2024. All rights reserved.