TimeZones,CDO,美国东部标准时间

问题描述

| 我需要实时区域大师的帮助! 我的目标是写一个工具(.Net),该工具将显示具有选定时区偏移量的SharePoint DB中的日期时间值。我发现SharePoint在其数据库中将日期时间值保留为UTC。它显示了它们的时区偏移量,并存储为int(0 ..〜50)。一点调查表明int值是CDO代码。除了我根据不同的来源编写的手动映射外,没有其他方法可以转换CDO代码。 现在,我的单元测试失败,具有以下值:CDO为34,UTC时间为2011-05-26 14:55:00。从GUI方面来看,时区类似于\'((GMT-05:00)Indiana(East)\'。在我的地图中,34对应于“美国东部标准时间”时区ID。
var id = \"US Eastern Standard Time\";
var zone = TimeZoneInfo.FindSystemTimeZoneById(id);
Console.WriteLine(zone);
Console.WriteLine(zone.StandardName);
结果是:
(GMT-05:00) Indiana (East)
US Eastern Standard Time
看起来还可以,都是“印第安纳州(东部)”。现在,我使用区域来转换值:
var dateTime = new DateTime(2011,05,26,14,55,00);
var converted = TimeZoneInfo.ConvertTimeFromUtc(dateTime,zone);
Console.WriteLine(converted);
结果是26.05.2011 10:55:00。但是SharePoint将其显示为26.05.2011 09:55:00!这就是我的单元测试失败的原因。我发现了timezoneconverter.com在线工具。它无法将时区设置为CDO或.Net时区ID,因此我选择了\'America / Indiana / Indianapolis \':
14:55:00 Thursday May 26,2011 in UTC converts to
10:55:00 Thursday May 26,2011 in America/Indiana/Indianapolis
我的转换器具有相同的结果。然后我选择了\'America / Indiana / Knox \':
14:55:00 Thursday May 26,2011 in UTC converts to
09:55:00 Thursday May 26,2011 in America/Indiana/Knox
Google Maps服务显示Knox位于西部,因此看起来很正常。 绝对,SharePoint使用最后一个时区。但是如何? CDO代码中是否还有其他标志可帮助找到更合适的Knox时区?什么是区域?它的ID是什么?我住在美国以外的地区,所以我几乎对这些区域发了疯。 谢谢,     

解决方法

        使用“东部标准时间”代替“美国东部标准时间”。 直到2006年,印第安纳州才参与整个州的夏令时活动,仅在某些地区。 \“美国东部标准时间\”表示日期/时间之前的不变时区。现在一切都变成了“东部标准时间” 亚利桑那州也有类似的情况,该州的大多数州都没有实行夏令时(尽管那瓦伙族人有)。这里使用的是“美国山区标准时间”,而不是“山地标准时间”。 请注意,添加\“ US \” +区域只是Microsoft识别这些例外区域的方法。     ,        如果您遇到的问题看起来像我的(时区似乎无法正常工作),答案是:尝试另一个时区。例如,我发现\“ SA Pacific Standard Time \”是我所需要的。