2008-09-23 20 views
8

Estoy leyendo texto de un archivo plano en C# y necesito comprobar si ciertos valores son fechas. Podrían estar en formato AAAAMMDD o en formato MM/DD/AA. ¿Cuál es la forma más sencilla de hacer esto en .Net?Convierta una cadena en una fecha en .net

Respuesta

26
string[] formats = {"yyyyMMdd", "MM/dd/yy"}; 
var Result = DateTime.ParseExact(input, formats, CultureInfo.CurrentCulture, DateTimeStyles.None); 

o

DateTime result; 
string[] formats = {"yyyyMMdd", "MM/dd/yy"}; 
DateTime.TryParseExact(input, formats, CultureInfo.CurrentCulture, DateTimeStyles.None, out result); 

Más información en la documentación de MSDN en ParseExact y TryParseExact.

+0

Esto es mejor que el mío. No sabía que podría hacer una matriz de cadenas para formatos. ¡Muy agradable! –

+0

¡Mejor aún! Justo lo que necesitaba. – JoshL

+0

Asegúrate de verificar el valor de retorno de DateTime.TryParseExact (...) ya que esa será la única forma de saber si tuvo éxito o no. –

3
+0

Como no puedo editar su respuesta, pensé que podría ser útil proporcionar un enlace al artículo de MSDN para ese método. http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx –

+0

[@Yadyn]: pensé que el intellisense sería suficiente, pero está bien, agregué el enlace para ser completo, ¡gracias! –

0

También se puede hacer Convert.ToDateTime

no está seguro de las ventajas de uno u otro

0

Usando TryParse no será una excepción si se produce un error. Además, TryParse devolverá True/False, lo que indica el éxito de la conversión.

Saludos ...

3

usted podría intentar también TryParseExact para establecer el formato exacto. método, aquí hay documentación: http://msdn.microsoft.com/en-us/library/ms131044.aspx

p.

DateTime outDt; 
bool blnYYYMMDD = 
    DateTime.TryParseExact(yourString,"yyyyMMdd" 
          ,CultureInfo.CurrentCulture,DateTimeStyles.None 
          , out outDt); 

Espero te ayude.

+0

¡Tío! Eso es muy útil, perdí casi una hora por esto, aunque sé que lo hice antes en alguna parte. – NeedHack

0

Puede utilizar el método TryParse para verificar la validez y analizar al mismo tiempo.

DateTime output; 
string input = "09/23/2008"; 
if (DateTime.TryParseExact(input,"MM/dd/yy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out output) || DateTime.TryParseExact(input,"yyyyMMdd", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out output)) 
{ 
    //handle valid date 
} 
else 
{ 
    //handle invalid date 
} 
Cuestiones relacionadas