Как разобрать дату из любого формата даты / времени в дд / мм / гггг? - PullRequest
0 голосов
/ 01 октября 2011

Я хочу проанализировать любой формат даты и времени в формате дд / мм / гггг.

вот мой код

// dates i am providing are
// Sat, 01 Oct 2011 17:30:00 +0400
// and
// Sat, 01 October   2011 12:21:23 EST

Datetime  dt = Convert.toDateTime(pubDate);

что дает мне следующее исключение

Строка не была распознана как допустимый DateTime. Неизвестное слово, начинающееся с индекса 32

Кто-нибудь мне подскажет, как я могу разбить любой формат даты на один? любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

DateTime не хранит даты в «формате» - используется внутреннее представление.Вам нужно разобрать переданную в строке, чтобы получить правильное значение для DateTime, а когда вы хотите отобразить , вы можете затем отформатировать его для любого отображения.

Лучше всего использовать TryParseExact, указав точную строку формата.Вам необходимо использовать пользовательские строки формата даты и времени .

Использовать перегрузку, которая принимает string[] строк формата - по одной для каждого формата даты.

Что касается части EST - фреймворк не поддерживает именованные часовые пояса.Возможно, вы захотите написать оболочку, которая преобразует именованные часовые пояса в их эквивалентную, но разбираемую форму.

Не проверено (на примере MSDN):

string[] formats= {"ddd, dd/MMM/yyyy hh:mm:ss K", 
                   "ddd, dd MMMM yyyy hh:mm:ss EST"};

DateTime dateValue;

foreach (string dateString in dateStrings)
{
   if (DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
   else
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
0 голосов
/ 01 октября 2011

Удалите 'EST' из строки, и она должна работать.

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