.NET 通过时区名称获取时区偏移量

Posted

技术标签:

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

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

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

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

谢谢!

【问题讨论】:

【参考方案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? 感谢奥德。设置正确使用它是什么意思?我实际上遇到了不一致的结果 - 我刚刚发布了一个关于它的问题,如果可以,请提供帮助。 ***.com/questions/8356866/… @ingredient_15939 您指定的 E 澳大利亚标准时间始终为 +10。 E 澳大利亚夏令时为 +11。【参考方案3】:

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

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

【讨论】:

好主意,现在就试试 :) 我正在用 GetSystemTimeZones() 返回的集合填充一个下拉列表 与其用集合中每个TimeZone 对象的ID/字符串填充下拉列表,为什么不在下拉列表中添加实际对象而不是Items?这样,当下拉列表更改时,您可以使用 (TimeZoneInfo)myDropDown.SelectedItem 获取对 TimeZoneInfo 对象的引用,然后您不需要每次都调用 .FindSystemTimeZoneById,您已经拥有该对象。

以上是关于.NET 通过时区名称获取时区偏移量的主要内容,如果未能解决你的问题,请参考以下文章

从 UTC 偏移量获取时区名称

如何在 .NET 中的 DST 时间获取 UTC 偏移量

在不使用字符串的情况下在 javascript 中获取另一个时区的时区偏移量

Python - 给定时间戳UTC和UTC偏移量的时区名称

如何在 JavaScript 中获取时区名称?

将其他时区转换为本地时区(偏移量)