Часовые пояса, CDO, восточное стандартное время США - PullRequest
3 голосов
/ 31 мая 2011

Мне нужна помощь гуру в реальном времени!

Моя цель - написать инструмент (в .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?Что такое зона?Какой у него идентификатор?Я живу за пределами США, поэтому я почти сошел с ума от зон.

Спасибо,

Ответы [ 2 ]

6 голосов
/ 25 июля 2011

Используйте «Восточное стандартное время» вместо «Восточное стандартное время США».

До 2006 года штат Индиана не участвовал в переходе на летнее время по всему штату, только в определенных районах.«Стандартное восточное время США» представляет собой неизменный часовой пояс для даты / времени ранее.Теперь все «Восточное стандартное время»

В Аризоне похожая ситуация, когда большая часть штата не проводит летнее время (хотя нация навахо это делает).Там вместо «Стандартного времени горы США» используется вместо «Стандартного времени горы».

Обратите внимание, что добавление зоны «США» + - это просто способ Microsoft определить эти исключительные области.

0 голосов
/ 09 июня 2011

Если вы столкнулись с проблемой, которая похожа на мою (часовой пояс, который, кажется, работает неправильно), ответ: ПОПРОБУЙТЕ ДРУГОЙ ВРЕМЯ ЗОНЫ. Например, я обнаружил, что мне нужно «Стандартное тихоокеанское время SA».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...