2011-08-26 4 views
7

Duplicar posibles:
DateTime.TryParse century control C#DateTime TryParse - mapeo '99' a 2099, no 1999

necesito TryParse una cadena como la siguiente: "01/01/99 "en un objeto DateTime, y estoy usando algo como esto:

DateTime outDate; 
if (DateTime.TryParseExact("01/01/99", "dd/MM/yy", null, System.Globalization.DateTimeStyles.None, out outDate)) 
{ 
    //Do stuff here 
} 

Por supuesto, esta fecha se analiza como 01/01/1999, la cual es no es lo que quiero, quiero que se analice como 2099. ¿Hay alguna manera fácil de hacerlo? Tristemente modificar los datos que estoy analizando para incluir el año completo no es una opción.

+7

Qué hemos aprendido nada de Y2K? :( –

+0

IIRC, hay un umbral de un año para determinar el siglo basado en el año de 2 dígitos. No estoy seguro de si el umbral puede cambiarse a través de la configuración –

+1

si los dígitos de dos dígitos siempre se infieren como '20yy'? –

Respuesta

5

Tomado de this answer, puede suministrar ParseExact() con un objeto de cultivo. TryParseExact() sospechar que sería la misma:

CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.LCID); 
ci.Calendar.TwoDigitYearMax = 2099; 
//Parse the date using our custom culture. 
DateTime dt = DateTime.ParseExact(input, "MMM-yy", ci); 
+0

Fantástico, funciona un regalo, ¡gracias! – Chris

0

Esta es una configuración regional. En Windows 7, puede editar en el Panel de control> Reloj, Idioma y Región> Región e idioma. En la pestaña de formatos, presiona el botón Avanzado y mira debajo de la fecha.

Por fuera de mi cabeza, no conozco ninguna forma de cambiar esto pragmáticamente, pero si lo configura en el panel de control, su aplicación lo usará siempre que no cambie la cultura.

Dicho esto, realmente hay que vencer a quien le esté suministrando estos datos con un objeto pesado. Deberíamos haber eliminado este tipo de tonterías Y2K hace 12 años.

editar - El enlace de comentario de dan04 también tiene algunas opciones.

Cuestiones relacionadas