【问题标题】:How to Convert from .Net TimeZone to MySQL TimeZone如何从 .Net 时区转换为 MySQL 时区
【发布时间】:2014-12-30 15:12:42
【问题描述】:

我正在尝试找出如何在 .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】:

    MySQL 使用 IANA 时区标准。你可以阅读MySQL's time zone support here。但是,您应该认识到,在 Windows 上,MySQL 的时区数据已经严重过时了。 There is an open issue here。 (因此,您可能需要重新考虑是否真的需要使用 MySQL Convert_TZ 函数,或者您是否可以只存储 UTC 值并在您的 .NET 代码中进行转换。)

    您可以在the timezone tag wiki 中了解不同类型的时区。

    默认情况下,.NET 使用 Microsoft Windows 时区。这是通过TimeZoneInfo 对象完成的。较旧的 TimeZone 对象也在 .NET Framework 中,但不应再使用。

    要在 .Net 中使用 IANA 时区而不是 Microsoft 时区,您应该使用 Noda Time 库。使用 Noda Time,您可以像这样获取系统的本地 IANA 时区:

    string tz = DateTimeZoneProviders.Tzdb.GetSystemDefault().Id;
    

    如果您已经在使用 Windows 时区,您可以使用 Noda Time 将它们转换为 IANA 时区,using the methods described here

    【讨论】:

    • 谢谢。野田时间是我一直在寻找的。因为我们的应用程序在 Windows 上运行,但 MySQL 由第三方托管,所以我能够在 SQL 级别转换日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多