2012-01-06 5 views
3

Я пытаюсь преобразовать строковое значение в значение datetime, но получаю ошибку System.FormatException. Это связано с информацией о часовом поясе, которая является частью строки даты. Есть ли способ, который сможет обрабатывать это преобразование?Parse String DateTime, содержащий TimeZone Info

string date = "Wed, 04 Jan 2012 20:18:00 EST"; 
DateTime dt = Convert.ToDateTime(date); 
Console.WriteLine(dt.ToString()); 
+1

CST = Центральное стандартное время в США и Австралии, а также стандартное время в Китае. Если у вас сейчас нет проблем, вы позже. –

ответ

5

Я не верю, что есть какой-либо custom date and time format string, который будет разбирать или форматировать часовой пояс аббревиатуру. Вам нужно будет разграничить его, проанализировать локальную часть, определить, какой часовой пояс обозначается аббревиатурой (удачи с этим - они неоднозначны), а затем применить этот часовой пояс к местному времени, чтобы получить значение UTC (опять же, это может быть неоднозначным).

Если вы полностью контролируете формат, я попытался бы избежать включения информации о часовом поясе, если вы можете, или включить смещение, а не часовой пояс, если это все, что важно (смещение не " t дать ту же информацию, конечно), или однозначный идентификатор часового пояса, если вам действительно нужен часовой пояс. Обратите внимание, что .NET использует идентификаторы часовых поясов системы Windows; мой собственный проект Noda Time использует более распространенные идентификаторы Olson/zoneinfo/tz, если это вам полезно.

+0

Я не уверен, что это возможно с помощью 'DateTimeOffset' – V4Vendetta

+0

@ V4Vendetta: Как бы вы предложили это сделать? 'DateTimeOffset' не использует другой набор настраиваемых спецификаторов строки даты и времени, поэтому, если я не пропустил что-то на этой странице, я не думаю, что есть что-то встроенное ... –

+0

Спасибо за предложение. Я надеялся, что мне не придется идти по этому маршруту. К сожалению, я не контролирую формат. Я видел, что читатель SyndicationFeed способен анализировать подобные даты, поэтому надеялся, что это более простой метод. – threela