在数据库中,我使用UTC存储所有日期/时间。.NET通过时区名称获取时区偏移
我知道用户的时区名称(例如“美国东部标准时间”)。
为了显示正确的时间,我想我需要添加用户的时区偏移到UTC日期/时间。但是,我如何通过时区名称获得时区偏移?
谢谢!
在数据库中,我使用UTC存储所有日期/时间。.NET通过时区名称获取时区偏移
我知道用户的时区名称(例如“美国东部标准时间”)。
为了显示正确的时间,我想我需要添加用户的时区偏移到UTC日期/时间。但是,我如何通过时区名称获得时区偏移?
谢谢!
您可以使用TimeZoneInfo.FindSystemTimeZoneById
获得使用提供的ID TimeZoneInfo.GetUtcOffset
不同于TimeZoneInfo
对象,那么:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
TimeSpan offset = tzi.GetUtcOffset(myDateTime);
您可以使用TimeZoneInfo类的GetSystemTimeZones()方法来获取服务器上配置的所有时区的列表,并将其与客户端中的时区相匹配。
虽然为什么你有格式“美国东部标准时间”的时区?那个是从哪里来的?
伟大的想法,现在试试吧:) 我填充一个下拉与GetSystemTimeZones返回(集合) – 2010-06-05 07:28:48
而不是在ID /每'TimeZone'对象的字符串填充下拉集合,为什么不把实际对象添加为下拉菜单中的'Item's?这样,当下拉改变时,你可以使用'(TimeZoneInfo)myDropDown.SelectedItem'获取对TimeZoneInfo对象的引用。然后你不需要每次都调用'.FindSystemTimeZoneById',你已经拥有了目的。 – 2013-07-15 13:51:51
,而不是做一些手工此外,你应该采取的TimeZoneInfo
的ConvertTime
方法将处理转换的优势你的日期基于你指定的时区。
var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);
优秀的建议。 – 2015-08-12 06:51:12
这解决了我的问题。谢谢! – 2010-06-05 07:43:35
这似乎不适用于我。目前,它是“E.澳大利亚标准时间”区域的DST,因此它们的时间是GMT + 11。但是,当我运行这个时,我得到了10个小时的结果。它应该是11.代码是:TimeZoneInfo.FindSystemTimeZoneById(“E。澳大利亚标准时间”)。GetUtcOffset(Now.ToUniversalTime).Hours。我究竟做错了什么? – 2011-12-02 13:07:10
@ ingredient_15939 - 可能没有错。您是否检查过运行的计算机是否设置为正确使用DST? – Oded 2011-12-02 13:08:13