2011-02-24 11 views
7

nodo de C# aquí. Una pregunta simple, pero mirando todo en línea, parece que estoy haciendo esto bien. Pero, ¿puede alguien decirme por qué este código no funcionaría:Parece que DateTime.TryParseExact no coincide con AM/PM con "tt"

string testDateString = "2/02/2011 3:04:01 PM"; 
string testFormat = "d/MM/yyyy h:mm:ss tt"; 
DateTime testDate = new DateTime(); 
DateTime.TryParseExact(testDateString, testFormat, null, 0, out testDate); 

// Value of testDate is the default {1/01/0001 12:00:00 a.m.} 

Pero la simple eliminación de la AM/PM partir de la fecha de cuerdas y el "tt" en el formato funciona como se esperaba?

string testDateString = "2/02/2011 3:04:01"; 
string testFormat = "d/MM/yyyy h:mm:ss"; 
DateTime testDate = new DateTime(); 
DateTime.TryParseExact(testDateString, testFormat, null, 0, out testDate); 

// Value of testDate is the expected {2/02/2011 3:04:01 a.m.} 
+3

Parece para que funcione bien para mí ... – SwDevMan81

+0

Se supone que debes prestar atención al valor de retorno de TryParseExact(). Tienes falso aquí. Usa ParseExact en su lugar, ahora obtienes una buena excepción. –

Respuesta

7

A pesar de su nombre exacto , DateTime.TryParseExact() depende de la cultura del sistema para analizar las fechas. Intente especificar una cultura donde se utiliza la notación AM/PM, tales como en-US:

DateTime.TryParseExact(testDateString, testFormat, new System.Globalization.CultureInfo("en-US"), DateTimeStyles.None, out testDate); 
+0

¡Ah, muchas gracias! – Aaryn

3

Tiene que especificar una cultura que realmente utiliza AM/PMdesignators, por ejemplo, un Brittish CultureInfo:

DateTime.TryParseExact(testDateString, testFormat, CultureInfo.GetCultureInfo("en-GB"), 0, out testDate); 
Cuestiones relacionadas