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

3
我需要一位实时时区专家的帮助!
我的目标是编写一个工具(.Net),以所选时区偏移量显示SharePoint数据库中的日期时间值。我发现SharePoint将datetime值保存为UTC格式在其数据库中。它会将它们与时区偏移量一起显示,该偏移量存储为int(0 .. ~50)。一些调查表明int值是CDO代码。除了由我手动映射不同源基于的代码,没有其他转换CDO代码的方法。
现在,我有一个失败的单元测试,其数值如下:CDO代码为34,UTC时间为2011-05-26 14:55:00。从GUI侧面看,时区看起来像“(GMT-05:00)印第安纳州(东部)”。在我的映射中,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);

结果是2011年5月26日10:55:00。但是SharePoint显示为2011年5月26日09:55:00!这就是我的单元测试失败的原因。我发现了在线工具timezoneconverter.com。它没有设置时区为CDO或.Net时区ID的方法,所以我选择了“美国/印第安纳州/印第安纳波利斯”:

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

谷歌地图服务显示诺克斯位于更西边,所以看起来很正常。

肯定的是,SharePoint使用最后一个时区。但是如何使用?是否有附加标志对CDO代码有帮助,以找到更合适的诺克斯时区?该区域是什么?它的ID是什么?我住在美国之外,所以我几乎被时区搞疯了。

谢谢,


1
我实在不知道如何解决你的问题,但这篇文章或许能为你提供一些线索:http://msdn.microsoft.com/en-us/library/ms197282.aspx。如果它提到的某个方法对于“26.05.2011 10:55:00”返回了错误结果,你可以试着反编译相应的SharePoint程序集来看看内部运行情况。 - Marek Grzenkowicz
2个回答

6
使用“东部标准时间”代替“美国东部标准时间”。
直到2006年,印第安纳州全境并未参与夏令时,只有某些地区。 “美国东部标准时间”代表日期/时间早期的不变时区。现在一切都是“东部标准时间”。
亚利桑那州也有类似的情况,该州大部分地区不遵守夏令时(尽管纳瓦霍族这样做)。 在那里,“美国山区标准时间”代替“山区标准时间”。
请注意,“US” +时区的添加只是微软用来识别这些特殊区域的方式。

非常好的答案。谢谢。在您的回答之后,我找到了这些链接,它们提供了一些有趣的印第安纳州背景信息-http://www.timeanddate.com/time/us/indiana-time.html和一些亚利桑那州的背景信息-http://www.timeanddate.com/time/us/arizona-no-dst.html。 - Michael Levy

0
如果你遇到了一个类似我的问题(时区似乎工作不正常),答案是:尝试另一个时区。例如,我发现“南美太平洋标准时间”是我需要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接