DateTime.Parse бросить исключение в C # - PullRequest
3 голосов
/ 31 января 2012

Понятия не имею, почему было сгенерировано исключение, вот рабочий код:

DateTime.Parse("1/12/2012 12:00:00 AM")

И это тот, который генерирует исключение:

DateTime.Parse("1/13/2012 12:00:00 AM")

Брошенное исключение «FormatException» , включить с этим сообщением: «Строка не была распознана как действительный DateTime.»

Вот значение CurrentCulture:

System.Globalization.CultureInfo.CurrentCulture
{en-MY}
Calendar: {System.Globalization.GregorianCalendar}
CompareInfo: {CompareInfo - en-MY}
CultureTypes: SpecificCultures | InstalledWin32Cultures
DateTimeFormat: {System.Globalization.DateTimeFormatInfo}
DisplayName: "English (Malaysia)"
EnglishName: "English (Malaysia)"
IetfLanguageTag: "en-MY"
IsNeutralCulture: false
IsReadOnly: true
KeyboardLayoutId: 17417
LCID: 17417
Name: "en-MY"
NativeName: "English (Malaysia)"
NumberFormat: {System.Globalization.NumberFormatInfo}
OptionalCalendars: {System.Globalization.Calendar[2]}
Parent: {en}
TextInfo: {TextInfo - en-MY}
ThreeLetterISOLanguageName: "eng"
ThreeLetterWindowsLanguageName: "ENM"
TwoLetterISOLanguageName: "en"
UseUserOverride: true

Anyoneзнаете, что здесь происходит?

1 Ответ

13 голосов
/ 31 января 2012

Потому что в году всего 12 месяцев;)

Я предполагаю, что в вашей текущей культуре используется 'dd / MM / yyyy'. Либо укажите формат даты культуры, который вы используете для разбора строки с использованием перегрузки Parse:

DateTime.Parse(String, IFormatProvider) 

или используйте метод ParseExact () и укажите формат самостоятельно.

var provider = CultureInfo.InvariantCulture;
var format = "M/dd/yyyy hh:mm:ss tt";

DateTime.ParseExact("1/13/2012 12:00:00 AM", format, provider);
...