【发布时间】:2011-05-31 19:20:52
【问题描述】:
我需要实时时区大师的帮助!
我的目标是编写一个工具(在 .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
我的转换器有相同的结果。然后我选择了“美国/印第安纳/诺克斯”:
14:55:00 Thursday May 26, 2011 in UTC converts to
09:55:00 Thursday May 26, 2011 in America/Indiana/Knox
Google 地图服务显示诺克斯位于更偏西的位置,因此看起来很正常。
毫无疑问,SharePoint 使用最后一个时区。但是如何? CDO 代码中是否有额外的标志可以帮助找到更合适的诺克斯时区?什么是区域?它的id是什么?我住在美国以外,所以我几乎对这些区域感到疯狂。
谢谢,
【问题讨论】:
-
我不知道如何解决您的问题,但这篇文章可能会对msdn.microsoft.com/en-us/library/ms197282.aspx 有所启发。如果它提到的其中一种方法对 26.05.2011 10:55:00 返回错误的结果,您可以尝试反编译适当的 SharePoint 程序集,看看里面发生了什么。
标签: .net sharepoint timezone