2011-10-20 25 views
5

Czy ktoś może zobaczyć, co robię źle? Assert.IsTrue(parses) zawsze kończy się niepowodzeniem.Dlaczego ta analiza DateTime zawsze kończy się niepowodzeniem?

[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); 
    } 

Próbowałem również go zatem, z takim samym skutkiem:

[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

Rok powinien być "yyyy" (małe litery), ale nie jestem pewien, czy istnieje jakiś ciąg formatu, który zinterpretuje "PDT". –

+0

@MattHamilton - oto odpowiedź! zmienił go i działa. Opublikuj jako odpowiedź, a ja to zaakceptuję. –

+0

Niech @Al ma rep. :) –

Odpowiedz

3

Jak zauważył Matt Hamilton, yyyy muszą być pisane małymi literami. I xxx jest całkowicie nieważny. Zawsze możesz przetestować ciąg formatu używając metody odwrotnej DateTime.ToString(format,CultureInfo.InvariantCulture).

+0

Zgodnie z tym poprzednim pytaniem można zastąpić ciąg strefy czasowej z przesunięciem strefy czasowej i będzie działać - http://stackoverflow.com/questions/241789/parse-datetime-with-timezone-of-form-pst-cest-utc -etc –

+0

Naprawdę podoba mi się, że dałeś możliwość wypróbowania testu wstecznego. Nie przyszło mi do głowy, gdy miałem podobne bóle. Nadal nie jest to całkowita poprawka dla programu operacyjnego, ale krok we właściwym kierunku. –

1
string mask = "ddd MMM dd HH:mm:ss PDT yyyy"; 
Powiązane problemy