2011-10-20 13 views
5

¿Alguien puede ver lo que estoy haciendo mal aquí? El Assert.IsTrue(parses) siempre falla.¿Por qué este análisis de fecha y hora siempre falla?

[TestMethod] 
    public void Can_Parse_To_DateTime() 
    { 
     DateTime expected = new DateTime(2011, 10, 19, 16, 01, 59); 
     DateTime actual; 

     string value = "Wed Oct 19 16:01:59 PDT 2011"; 
     string mask = "ddd MMM dd HH:mm:ss xxx YYYY"; 

     bool parses = DateTime.TryParseExact(value, mask, 
              CultureInfo.InvariantCulture, 
              DateTimeStyles.None, 
              out actual); 

     Assert.IsTrue(parses); 
     Assert.AreEqual(expected, actual); 
    } 

También he probado por lo tanto, con el mismo resultado:

[TestMethod] 
    public void parsing() 
    { 
     DateTime expected = new DateTime(2011, 10, 19, 16, 01, 59); 
     DateTime actual; 

     string value = "Wed Oct 19 16:01:59 PDT 2011"; 
     string mask = "ddd MMM dd HH:mm:ss YYYY"; // note removal of "xxx " 

     value = value.Remove(20, 4); // removal of the "PDT " 
     bool parses = DateTime.TryParseExact(value, mask, 
              CultureInfo.InvariantCulture, 
              DateTimeStyles.None, 
              out actual); 

     Assert.IsTrue(parses); 
     Assert.AreEqual(expected, actual); 
    } 
+0

El año debe ser "aaaa" (minúsculas), pero no estoy seguro de que haya una cadena de formato que interprete "PDT". –

+0

@MattHamilton: ¡esa es la respuesta! lo cambió y funciona. Publique como respuesta y lo aceptaré. –

+0

Deje @Al tener el representante. :) –

Respuesta

3

Como se ha señalado por Matt Hamilton, yyyy debe estar en minúsculas. Y xxx es totalmente inválido. Siempre puede probar su cadena de formato utilizando el método inverso DateTime.ToString(format,CultureInfo.InvariantCulture).

+0

De acuerdo con esta pregunta anterior, puede reemplazar la cadena de zona horaria con la compensación de zona horaria y funcionará - http://stackoverflow.com/questions/241789/parse-datetime-with-timezone-of-form-pst-cest-utc -etc –

+0

Realmente me gusta que le dio la opción de intentar una verificación inversa. No se me había ocurrido cuando tuve dolores similares. Todavía no es una solución total para el OP, sino un paso en la dirección correcta. –

1
string mask = "ddd MMM dd HH:mm:ss PDT yyyy"; 
Cuestiones relacionadas