2015-02-23 2 views
9

У кого-нибудь есть идеи, почему это не удается? Мне удалось обойти это с помощью ParseExact, но я хотел бы понять, почему он терпит неудачу.C# DateTime.Parse Error

DateTime test = DateTime.Parse("Dec 24 17:45"); 

Даты < «Дек 24» отлично работает. Даты> = Dec 24 потерпит неудачу с этой ошибкой:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll Additional information: The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar.

EDIT: Благодаря Хабиб для заметив даже, когда я не получаю сообщение об ошибке не было результатом я ожидал. Поэтому будьте осторожны с DateTime.Parse, когда они не используются в поддерживаемых форматах!

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

if (!DateTime.TryParseExact(inDateTime, "MMM dd HH:mm", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces,out outDateTime)) 
{ 
    if (!DateTime.TryParseExact(inDateTime, "MMM dd yyyy", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out outDateTime)) 
    { 
     //Handle failure to Parse 
    } 
} 
+1

Можете ли вы показать нам точный код, который вы пытались выполнить? –

+0

Это хороший вопрос. –

+0

@ A.Abramov - ОП включил в себя почти все, что нужно. –

ответ

9

Dates < "Dec 24" work fine. Dates >= Dec 24 fail with this error

DateTime.Parse использует standard formats для разбора даты и причины его отсутствие на день> = 24, что он рассматривает , что часть как часть часа вместо части дня, как вы и предполагали.

Так как разрешенная часть часа может быть от 0 до 23, она отлично работает для тех дат. (Не считается днем)

Также он игнорирует часть Dec и рассматривает текущую дату для этой части.

Рассмотрим следующий пример:

DateTime test = DateTime.Parse("Dec 22 17:45"); 

Она возвращает:

test = {23/02/2015 10:17:00 PM} 

Посмотрите на время часть он установлен в 22:17 или 10:17 PM

+0

FYI на самом деле не работает «0-23». Для '23 декабря 17: 45' он возвращается как' 23/23/2015 11:17:00 PM'. https://dotnetfiddle.net/WyVMRl – tnw

+0

@tnw, я имел в виду, что часовая часть может иметь значения от 0 до 23. – Habib

+0

Ах да, достаточно справедливо, просто хотел удостовериться, что было сделано различие. – tnw

-2

Формат DateTime что вы проходите, недействительно. Я считаю, что проблема заключается в том, что вы не поставляете год для части даты. Вот пример принятого DateTime:

DateTime time = DateTime.Parse("Dec 24 2015 17:45"); 
+2

Ну, это не главное, я думаю .. –

+1

Понял, перечитав вопрос. Извините, я прыгнул с пистолета, я был просто взволнован, чтобы начать помогать и учиться самому себе :) – MWheater82