2012-06-30 3 views
5

Я как бы застрял в проблеме, когда мне не удается проанализировать дату и время из строки, которую я читаю из текстового файла. Строка Я получаю в следующем формате:Время синтаксиса из строки формата ddMMMyyyy hhmm (with Month-Name)

05SEP1998 2400

и я пытаюсь разобрать строку с помощью следующего кода:

string dateTimeStr = "05SEP1998 2400" 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy hhmm"; 

var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider); 

Но при разборе, приведенный выше код бросает FormatException:

String was not recognized as a valid DateTime.

Может кто-нибудь пожалуйста, ч elp меня исправляю эту проблему?

+0

Да та же ошибка в моем конце для этого кода. –

+0

DateTime имеет только 23 часа, а не 24. –

ответ

1

hh есть 12 час, HH - 24 час. Тем не менее, она должна быть в диапазоне 0-23, а не 24. Если вы не можете легко изменить, как генерируются эти строки даты, вы можете разобрать его вручную:

string dateTimeStr = "05SEP1998 2400"; 

var provider = CultureInfo.InvariantCulture; 

const string Format = "ddMMMyyyy HHmm"; 
int HourPos = Format.IndexOf("HH"); 
var hour = dateTimeStr.Substring(HourPos, 2); 
bool addDay = hour == "24"; 
if (addDay) 
    dateTimeStr = dateTimeStr.Substring(0, HourPos) + "00" + dateTimeStr.Substring(HourPos + 2); 
var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider); 
if (addDay) 
    dateTime += TimeSpan.FromHours(24); 

Обратите внимание, что это будет бросать исключение, если dateTimeStr не имеет правильного количества символов. Возможно, вы захотите справиться с этим лучше.

+0

Я нахожу ваш подход неправильным. Зачем? Потому что в этом коде, например '' 05SEP1998 2400 ", вы предполагаете, что 24 - это 0-й час 5-го сентября. Но Infact это 0-й час 6-го сентября. Следовательно, realdate is' "06SEP1998 0000" ' –

+0

Вот почему у меня есть' dateTime + = TimeSpan.FromHours (24); '. Дата примера разрешается до '9/6/1998 12:00:00 AM' (или' 06SEP1998 0000'). –

+0

OK. Теперь это понятно. –

0

Есть 24 часа в сутки. Но при написании мы говорим его от 0-23. Он дает исключение по часовому формату.

Как я узнал?

Я попытался создать DateTime объект из вашей строки как

DateTime dt = new DateTime(1998, 9, 5, 24, 0, 0); 

Это дало ошибку на часах, что Hour. minute and second parameters descrive an un-representable DateTime

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