2013-09-05 6 views
1

Я пытаюсь разобрать значения даты и времени с помощью этого:DateTime синтаксического анализа с пользовательским форматом

DateTime insertedDateTime = DateTime.ParseExact(tokens[0] + " " + tokens[1], "yyyy-MM-dd mm:hh:ss", CultureInfo.InvariantCulture); 

//tokens[0] = 2013-09-05 
//tokens[1] = 07:23:32 

Я получаю эту ошибку:

String was not recognized as a valid DateTime.

Любая помощь будет оценена.

ответ

6

вы должны написать:

DateTime insertedDateTime = DateTime.ParseExact(tokens[0] + " " + tokens[1], "yyyy-MM-dd mm:HH:ss", CultureInfo.InvariantCulture); 

потому что hh означает время 12h и HH означает время 24h и ввод 23 в час времени 12h недействителен :)

Конечно, если вы уверены, что часы второй в свое время, и вы не хотите писать HH:mm:ss или hh:mm:ss (для формата 12h)

DEMO here

+1

час нужно ставить перед минуту. – shahkalpesh

+1

@shahkalpesh и что я написал в комментарии после «Конечно»? Вы прочитали весь пост? Мой код работает отлично, поэтому downvoting не справедлив – wudzik

+1

Мои извинения. Я не могу отменить нисходящее, вы получаете верхнюю часть. Приветствия. – shahkalpesh

4

Часы должны идти первым: "yyyy-MM-dd hh:mm:ss"

Примечание: Рассмотрим использовать 24-часовой формат HH вместо 12-часовой формат hh.

+0

Вы уверены, что он может определить **, а **, **, ** с данной информацией? Возможно, он имел в виду «HH», а не «hh», как упоминалось в другом ответе. –

+0

@JeppeStigNielsen по умолчанию будет AM. Но вы правы - если OP требует времени PM, он также должен использовать * HH * вместо * hh *. Или добавьте * tt * для форматирования и предоставления указателя AM/PM –

3

Вы должны изменить свой mm:hh:ss на hh:mm:ss, потому что сначала вы передаете первую часть часа.

DateTime insertedDateTime = DateTime.ParseExact(2013-09-05 07:23:32, "yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture); 
Console.WriteLine(insertedDateTime); 

Выход будет;

9/5/2013 7:23:32 AM 

Здесь DEMO.

Для получения дополнительной информации;

1

пытаются использовать

string strdate= "yourdate"; 
DateTime.ParseExact(strdate, "M/d/yyyy hh:mm", CultureInfo.InvariantCulture); 
+0

Это не сработает. Вы пробовали это сначала, прежде чем ответить здесь? –

+0

Да, я использовал его до того, как он отлично работает, вам нужно убедиться, что формат строки даты – msm2020