2011-10-20 86 views
5

任何人都可以看到我在這裏做錯了嗎? Assert.IsTrue(parses)總是失敗。爲什麼這個DateTime解析總是失敗?

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

我也試過這樣,同樣的結果:

[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

年份應該是「yyyy」(小寫),但我不確定是否有任何格式字符串會解釋「PDT」。 –

+0

@MattHamilton - 這就是答案!改變它,它的作品。發佈作爲答案,我會接受它。 –

+0

讓@Al有代表。 :) –

回答

3

正如馬特漢密爾頓指出,yyyy必須是小寫。而xxx是完全無效的。您總是可以使用反向方法DateTime.ToString(format,CultureInfo.InvariantCulture)來測試您的格式字符串。

+0

根據此前面的問題,您可以用時區偏移替換時區字符串,它會工作 - http://stackoverflow.com/questions/241789/parse-datetime-with-timezone-of-form-pst-cest-utc - 等 –

+0

真的很喜歡你給了選擇嘗試反向檢查。當我有類似的痛苦時,我並沒有想到。仍然不是OP的完整解決方案,而是向正確方向邁出的一步。 –

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