Нужна помощь с синтаксисом C # ParseExact и перемещением между часовыми поясами - PullRequest
2 голосов
/ 20 апреля 2011

Хорошо, я решил позволить магии Stackoverflow работать на меня!

У меня есть дата в формате: «18 апреля 2011 19:30 ПО ВОСТОЧНОМУ ВРЕМЕНИ», которую мне нужно вставить в объект DateTime в C #. Один кавиат, я тоже хочу перевести его на UTC. Обязательно, когда DST закончится, он придет как EST.

Я знаю, что мне нужно утверждение вроде:

 DateTime.ParseExact("Apr 18 2011 19:30 EDT",  "MMM DD yyyy something something ",  CultureInfo.InvariantCulture,  DateTimeStyles.None, out convertedDate);

Но перевести его в UTC выше моего уровня знаний.

Итак, в общем, мне нужно:

  1. Чтобы превратить 18 апреля 2011 19:30 ПО ВОСТОЧНОМУ ВРЕМЕНИ в DateTime
  2. Преобразование часового пояса EDT в время UTC.
  3. Получите объект DateTime.

Какой код, волшебники?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

Что ж, если всегда будет в восточное дневное время, вы можете сделать что-то вроде:

// Parse string. We don't need escaping since E,D and T 
// are not considered special characters by ParseExact.
var dateTimeInEasternTime = DateTime.ParseExact("Apr 18 2011 19:30 EDT",
                                                "MMM dd yyyy HH:mm EDT",    
                                                CultureInfo.InvariantCulture);

// Convert from the relevant timezone to UTC.
var dateTimeInUTC = TimeZoneInfo.ConvertTime
                    (dateTimeInEasternTime,  
                     TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"), 
                     TimeZoneInfo.Utc);

Вы можете кэшировать TimeZoneInfo, представляющий EST (который становится EDTв то время как летнее время включено), чтобы предотвратить поиск.

Если строка может заканчиваться трехбуквенным кодом, представляющим некоторый произвольный часовой пояс, это будет намного сложнее, так какЕсть много соглашений для них, ни одно из которых (AFAIK) в настоящее время не поддерживается .NET.Лучше всего сначала создать поиск по коду для соответствующего TimeZoneInfo (возможно, через свойство Id), после чего вы можете выполнить преобразование с помощью TimeZoneInfo.ConvertTime как обычно.

0 голосов
/ 20 апреля 2011

Я не уверен точно, где ты вешаешь.Похоже, вы успешно проанализировали строку в DateTime.

Чтобы преобразовать значение в UTC, вызовите метод ToUniversalTime().Обратите внимание, что при этом будет использоваться текущее значение времени относительно текущего часового пояса вашей системы.

ToUniversalTime() преобразуется в значение DateTime.

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