2011-10-20 1 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 -etc –

+0

あなたは逆のチェックを試みるオプションを与えたのが本当に好きです。私にも似たような痛みがあったときは、私には起こりませんでした。まだOPのための完全な修正ではなく、正しい方向への一歩。 –

1
string mask = "ddd MMM dd HH:mm:ss PDT yyyy"; 
関連する問題