2011-10-20 51 views
5

Có ai có thể nhìn thấy những gì tôi đang làm sai ở đây không? Assert.IsTrue(parses) luôn thất bại.Tại sao phân tích DateTime này luôn thất bại?

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

Tôi cũng đã thử nó như vậy, với kết quả tương tự:

[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

Năm phải là "yyyy" (chữ thường), nhưng tôi không chắc có chuỗi định dạng nào sẽ diễn giải "PDT". –

+0

@MattHamilton - đó là câu trả lời! thay đổi nó và nó hoạt động. Đăng như một câu trả lời và tôi sẽ chấp nhận nó. –

+0

Hãy để @Al có đại diện. :) –

Trả lời

3

Theo ghi nhận của Matt Hamilton, yyyy phải là chữ thường. Và xxx hoàn toàn không hợp lệ. Bạn luôn có thể kiểm tra chuỗi định dạng của mình bằng cách sử dụng phương thức đảo ngược DateTime.ToString(format,CultureInfo.InvariantCulture).

+0

Theo câu hỏi trước đây, bạn có thể thay thế chuỗi múi giờ bằng chênh lệch múi giờ và nó sẽ hoạt động - http://stackoverflow.com/questions/241789/parse-datetime-with-timezone-of-form-pst-cest-utc -etc –

+0

Thực sự như vậy bạn đã đưa ra tùy chọn để thử kiểm tra ngược lại. Nó đã không xảy ra với tôi khi tôi đã đau đớn tương tự. Vẫn không phải là một sửa chữa tổng số cho OP, nhưng một bước đi đúng hướng. –

1
string mask = "ddd MMM dd HH:mm:ss PDT yyyy"; 
Các vấn đề liên quan