【问题标题】:.NET Get timezone offset by timezone name.NET 通过时区名称获取时区偏移量
【发布时间】:2011-02-28 02:26:20
【问题描述】:

在数据库中,我以 UTC 格式存储所有日期/时间。

我知道用户的时区名称(例如“美国东部标准时间”)。

为了显示正确的时间,我想我需要将用户的时区偏移量添加到 UTC 日期/时间。但是如何通过时区名称获得时区偏移量?

谢谢!

【问题讨论】:

    标签: c# .net timezone internationalization


    【解决方案1】:

    您应该利用TimeZoneInfoConvertTime 方法而不是手动添加,该方法将根据您指定的时区处理转换日期。

    var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);
    

    【讨论】:

      【解决方案2】:

      您可以使用 TimeZoneInfo.FindSystemTimeZoneById 使用提供的 Id 获取 TimeZoneInfo 对象,然后从中获取 TimeZoneInfo.GetUtcOffset

      TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
      TimeSpan offset = tzi.GetUtcOffset( myDateTime);
      

      【讨论】:

      • 这似乎对我不起作用。目前,“E. Australia Standard Time”区域是DST,所以他们的时间是GMT+11。但是,当我运行它时,我得到了 10 小时的结果。应该是 11。代码是:TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time").GetUtcOffset(Now.ToUniversalTime).Hours。我做错了什么?
      • @ingredient_15939 - 可能没有错。您是否检查过正在运行的计算机是否设置为正确使用 DST?
      • 感谢奥德。设置正确使用它是什么意思?我实际上遇到了不一致的结果 - 我刚刚发布了一个关于它的问题,如果可以,请提供帮助。 stackoverflow.com/questions/8356866/…
      • @ingredient_15939 您指定的 E 澳大利亚标准时间始终为 +10。 E 澳大利亚夏令时为 +11。
      【解决方案3】:

      您可以使用TimeZoneInfo 类的GetSystemTimeZones() 方法获取服务器上配置的所有时区列表,并将其与客户端中的时区匹配。

      尽管为什么您的时区格式为“美国东部标准时间”?这是哪里来的?

      【讨论】:

      • 好主意,现在就试试 :) 我正在用 GetSystemTimeZones() 返回的集合填充一个下拉列表
      • 与其用集合中每个TimeZone 对象的ID/字符串填充下拉列表,为什么不在下拉列表中添加实际对象而不是Items?这样,当下拉列表更改时,您可以使用 (TimeZoneInfo)myDropDown.SelectedItem 获取对 TimeZoneInfo 对象的引用,然后您不需要每次都调用 .FindSystemTimeZoneById,您已经拥有该对象。
      猜你喜欢
      • 2016-05-07
      • 2014-02-15
      • 2021-04-11
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多