2009-09-28 3 views
5

Как преобразовать строку "28/09/2009" в DateTime в определенном формате? Ex: Я хочу преобразовать «2009-09-28 17:30:40» в DateTime. Я хочу преобразовать «28/09/2009 17:30:40» в DateTime. Я хочу преобразовать «20090928 17:30:40» в DateTime.Как преобразовать строку в определенный формат DateTime в C#?

Существует несколько возможных форматов. Я попытался это:

string[] formats = new string[] {"yyyymmdd","yyyymmddThhmmss","yyyy/mm/dd hh:mm:ss","yyyy/mm/dd","yyyy-mm-dd hh:mm:ss","yyyy-mm-dd"}; 
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime formattedDate = DateTime.ParseExact(aDate, formats, culture, DateTimeStyles.None); 

Этот пример генерирует исключение с сообщением «Строка не была признана в качестве действительного DateTime».

Что не так в коде выше?

+0

Falai brazuca! :) Можете ли вы дать нам немного больше информации о вашем сценарии? Получаете ли вы даты во всех трех форматах с одним и тем же контекстом? –

+0

Fala aí .... Мне нужно прочитать XML-документ. В этом документе есть строки, которые представляют даты. Но эти даты могут быть в нескольких форматах. Я должен определить эти форматы и преобразовать строки в DateTime. –

ответ

12

Ни один из ваших форматов не помещает первый день, например: "dd/MM/yyyy".

Также обратите внимание на столицу «M», поскольку нижний регистр «m» равен «минутам». У вас есть аналогичная проблема с вашими часами; так как ваши образцы все используют 24 часа, вам нужен капитал «H».

Ваш формат строки массив должен выглядеть следующим образом:

string[] formats = {"dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss"}; 

Эти форматы точно соответствуют поставляемые строки выборки.

Кроме того, в этом случае вы, вероятно, захотите использовать инвариантную культуру, а не en-US. В противном случае символ «/» в ваших строках формата является действительно специфичным для конкретной культуры разделителем дат, который пользователь может пережить в своей локальной системе.

Наконец, поскольку вы, очевидно, столкнулись с трудностями при сопоставлении строк, вы можете использовать TryParseExact(), который работает точно так же, как и синтаксический анализ, но использует параметр out вместо того, чтобы возвращать значение, чтобы оно могло возвращать логическое чтобы указать успех или неудачу, а не бросать исключение.

Смотрите полный формат строки ссылку здесь:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Смежные вопросы