Мне нужна помощь гуру в реальном времени!
Моя цель - написать инструмент (в .Net), который бы отображал значения даты и времени из базы данных SharePoint с выбранным смещением часового пояса.Я обнаружил, что SharePoint хранит значения даты и времени как UTC в своей БД.Он показывает их со смещением часового пояса, которое сохраняется как int (0 .. ~ 50).Небольшое исследование показало, что значение int является кодом CDO.Нет никакого способа преобразовать код CDO, кроме написанного мной ручного отображения на основе разных источников.
Теперь у меня не пройден модульный тест со следующими значениями: CDO - 34, время в UTC - 2011-05-26 14:55:00.Со стороны GUI часовой пояс выглядит как (GMT-05: 00) Индиана (Восток).На моей карте 34 соответствует идентификатору часового пояса "Восточное стандартное время США".
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, поэтому я выбрал «Америка / Индиана / Индианаполис»:
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, который помогает найти более подходящий часовой пояс Knox?Что такое зона?Какой у него идентификатор?Я живу за пределами США, поэтому я почти сошел с ума от зон.
Спасибо,