【问题标题】:Convert a time to specified time zone using C#?使用 C# 将时间转换为指定时区?
【发布时间】:2011-01-26 18:39:39
【问题描述】:

我正在使用 .Net 3.5 开发 C# 应用程序。我有用户的时区值以这种格式 (-05:00,1) 存储在数据库中,其中 -5.00 代表 EST 时区值,1 表示这个时区遵循夏令时(如果 0 不是夏令时)。

考虑到夏令时值,现在我想将任何日期时间值转换为此时区值。

感谢任何帮助。谢谢

【问题讨论】:

    标签: c# datetime timezone


    【解决方案1】:

    为什么不获取 GMT0 并添加用户延迟 (+/-)?

    【讨论】:

      【解决方案2】:

      只有一个偏移量以及它是否处于夏令时并不足以指示一个时区:可以有多个时区具有相同的标准偏移量和 DST 偏移量,但在不同时间有 DST 转换.

      这些数据是否已经在数据库中,或者您仍在设计它?理想情况下,您应该存储一个时区 ID - TimeZoneInfo 使用的是 Windows ID,这不是理想的 IMO(我更喜欢其他行业倾向于使用的 IANA/Olson ID),但至少它确实如此代表一个实时时区。

      一旦你有了一个TimeZoneInfo 和一个你想要转换的瞬间,ConvertTimeFromUtcConvertTimeToUtc 可能就是你想要的 - 但要小心你所说的“任何日期时间值”是什么意思;您需要确保您始终准确了解您所代表的内容。

      BCL 在所有这些方面都有些模糊,这是我开始 Noda Time 的原因之一,它允许使用 IANA 时区数据以及 BCL。

      【讨论】:

        【解决方案3】:

        为此使用DateTime.ParseExact()。但这不支持 DST 指标。

        【讨论】:

          【解决方案4】:

          @skeet 关于时区是正确的。相信我,他们疯了。你有像印度这样的地方,有 0.5 小时的休息时间。像委内瑞拉这样的地方刚刚改变了他们的时区。像美国这样的地方会更改其 DST 的开始和结束日期。您必须记住,时区受制于国家的政治意愿,并且它们确实会发生变化(比您想象的更频繁)。使用时区 id 而不是尝试跟踪数据库中的偏移量。

          如果您还没有弄清楚,如果您必须处理时区,使用 DateTimeOffset 将使您的生活轻松 100 倍。

          【讨论】:

            猜你喜欢
            • 2012-03-08
            • 2017-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-23
            • 2012-06-10
            • 2010-11-07
            相关资源
            最近更新 更多