【发布时间】:2011-02-28 02:26:20
【问题描述】:
在数据库中,我以 UTC 格式存储所有日期/时间。
我知道用户的时区名称(例如“美国东部标准时间”)。
为了显示正确的时间,我想我需要将用户的时区偏移量添加到 UTC 日期/时间。但是如何通过时区名称获得时区偏移量?
谢谢!
【问题讨论】:
标签: c# .net timezone internationalization
在数据库中,我以 UTC 格式存储所有日期/时间。
我知道用户的时区名称(例如“美国东部标准时间”)。
为了显示正确的时间,我想我需要将用户的时区偏移量添加到 UTC 日期/时间。但是如何通过时区名称获得时区偏移量?
谢谢!
【问题讨论】:
标签: c# .net timezone internationalization
您应该利用TimeZoneInfo 的ConvertTime 方法而不是手动添加,该方法将根据您指定的时区处理转换日期。
var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo);
【讨论】:
您可以使用 TimeZoneInfo.FindSystemTimeZoneById 使用提供的 Id 获取 TimeZoneInfo 对象,然后从中获取 TimeZoneInfo.GetUtcOffset:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
TimeSpan offset = tzi.GetUtcOffset( myDateTime);
【讨论】:
您可以使用TimeZoneInfo 类的GetSystemTimeZones() 方法获取服务器上配置的所有时区列表,并将其与客户端中的时区匹配。
尽管为什么您的时区格式为“美国东部标准时间”?这是哪里来的?
【讨论】:
TimeZone 对象的ID/字符串填充下拉列表,为什么不在下拉列表中添加实际对象而不是Items?这样,当下拉列表更改时,您可以使用 (TimeZoneInfo)myDropDown.SelectedItem 获取对 TimeZoneInfo 对象的引用,然后您不需要每次都调用 .FindSystemTimeZoneById,您已经拥有该对象。