.NET 通过时区名称获取时区偏移量
Posted
技术标签:
【中文标题】.NET 通过时区名称获取时区偏移量【英文标题】:.NET Get timezone offset by timezone name 【发布时间】:2011-02-28 02:26:20 【问题描述】:在数据库中,我以 UTC 格式存储所有日期/时间。
我知道用户的时区名称(例如“美国东部标准时间”)。
为了显示正确的时间,我想我需要将用户的时区偏移量添加到 UTC 日期/时间。但是如何通过时区名称获得时区偏移量?
谢谢!
【问题讨论】:
【参考方案1】:您应该利用TimeZoneInfo
的ConvertTime
方法而不是手动添加,该方法将根据您指定的时区处理转换日期。
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? 感谢奥德。设置正确使用它是什么意思?我实际上遇到了不一致的结果 - 我刚刚发布了一个关于它的问题,如果可以,请提供帮助。 ***.com/questions/8356866/… @ingredient_15939 您指定的 E 澳大利亚标准时间始终为 +10。 E 澳大利亚夏令时为 +11。【参考方案3】:您可以使用TimeZoneInfo 类的GetSystemTimeZones() 方法获取服务器上配置的所有时区列表,并将其与客户端中的时区匹配。
尽管为什么您的时区格式为“美国东部标准时间”?这是哪里来的?
【讨论】:
好主意,现在就试试 :) 我正在用 GetSystemTimeZones() 返回的集合填充一个下拉列表 与其用集合中每个TimeZone
对象的ID/字符串填充下拉列表,为什么不在下拉列表中添加实际对象而不是Item
s?这样,当下拉列表更改时,您可以使用 (TimeZoneInfo)myDropDown.SelectedItem
获取对 TimeZoneInfo 对象的引用,然后您不需要每次都调用 .FindSystemTimeZoneById
,您已经拥有该对象。以上是关于.NET 通过时区名称获取时区偏移量的主要内容,如果未能解决你的问题,请参考以下文章