我需要一位实时时区专家的帮助!
我的目标是编写一个工具(.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。
结果是:
我的转换器得到了相同的结果。然后我选择了 'America/Indiana/Knox':
我的目标是编写一个工具(.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是什么?我住在美国之外,所以我几乎被时区搞疯了。
谢谢,