2012-01-31 4 views
3

я понятия не имею, почему было брошено исключение, вот рабочий код:DateTime.Parse исключение бросить в C#

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 

Каждый знает, что здесь происходит?

+0

У вас нет какой-либо опечатки в вашем коде? Кроме того, ознакомьтесь с [Метод DateTime.TryParse] (http://msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx) – Tim

+5

Хм, вероятно, укусил тот факт, что в вашей культуре используется dd/мм/гггг. Есть не 13 месяцев в году, только 12. –

+1

Какова ценность System.Globalization.CultureInfo.CurrentCulture? – codekaizen

ответ

13

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

Я предполагаю, что установка «ДД/ММ/ГГГГ» использует текущую культуру. Либо указать, какие культурные события формат даты вы используете для строки, которая будет анализироваться с помощью перегрузки разбора:

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); 
+0

Это тоже мое предположение. – codekaizen

+0

Либо это yyyy/mm/dd, либо наоборот, и кажется, что последний год :) – f2lollpll

+0

+1 Хороший улов на настройке культуры. Я думал, возможно, компилятор был суеверным и не любил пятницу 13-го :) – Tim

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