我需要一个真正的时区大师帮助!
我的目标是编写一个工具(在.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
看起来没关系,两者都是'Indiana(East)'。现在,我使用区域转换值:
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
谷歌地图服务显示诺克斯位于西部,因此看起来很正常。
当然,SharePoint使用上一个时区。但是怎么样? CDO代码是否有额外的标志,有助于找到更合适的Knox时区?什么是区域?它的身份是什么?我住在美国以外的地方,所以我对这些区域几乎疯了。
谢谢,
答案 0 :(得分:6)
使用“东部标准时间”而不是“美国东部标准时间”。
直到2006年,印第安纳州并没有参与整个州的夏令时,只有某些地区。 “美国东部标准时间”代表之前日期/时间的不变时区。现在一切都是“东部标准时间”
在亚利桑那州也有类似的情况,大多数州都没有观察到夏令时(尽管纳瓦霍族的确如此)。使用“US Mountain Standard Time”代替“Mountain Standard Time”。
请注意,添加“US”+区域只是Microsoft识别这些特殊区域的方法。
答案 1 :(得分:0)
如果您遇到的问题看起来像我的(时区似乎工作不正常),答案是:尝试另一个TIMEZONE。例如,我发现“SA太平洋标准时间”就是我所需要的。