2012-03-01 40 views
7

Hôm nay tôi gặp vấn đề thực sự lạ.DateTime.Parse không thành công cho ngày hôm nay (01 tháng 3 năm 2012)! o_0

Cố gắng thực thi mã này # C:

class Program 
{ 
    static void Main(string[] args) 
    { 

     string yesterdayString = (DateTime.Now - TimeSpan.FromDays(1)).ToString("R"); 
     string nowString = DateTime.Now.ToString("R"); 

     DateTime.Parse(yesterdayString); 
     DateTime.Parse(nowString); 

     DateTime.Parse("Wed, 29 Feb 2012 18:05:49 GMT"); // this is what i have in yesterdayString 
     DateTime.Parse("Thu, 01 Mar 2012 18:05:40 GMT"); // this is what i have in nowString 
    } 
} 

Tất nhiên bạn sẽ nhận được vấn đề chỉ cho ngày hôm nay. Tôi đã thêm hai lệnh cuối cùng để cho bạn biết vấn đề là gì. Ngày mai và trong suốt tháng 3 của DateTime.Parse sẽ ném một Định dạngException (Chuỗi không được nhận dạng là Ngày giờ hợp lệ.)

Tại sao?

+1

Mã này hoạt động khi tôi chạy qua Linqpad. – DaveShaw

+1

Hoạt động tốt cho tôi trên .NET 4.0, FWIW. –

+0

Mã của bạn hoạt động cho tôi. – BlueM

Trả lời

2

Tôi cho rằng bạn đã tìm thấy lỗi. Điều này sẽ làm việc:

// 
var spanish = CultureInfo.GetCultureInfo("es"); 
var date = DateTime.Parse(DateTime.Now.ToString("R", spanish), spanish); 

hoặc cho Ý nó vẫn ném ...

var italian = CultureInfo.GetCultureInfo("it"); 
var date = DateTime.Parse(DateTime.Now.ToString("R", italian), italian); 
+1

Dường như các trình phân tích datetime không thích tiếng Ý và Tây Ban Nha tháng ba .. giải pháp của bạn không hoạt động cho tôi .. tôi sẽ cho tôi một giải pháp tự = D .. cảm ơn anyway. ps .. tôi không thể cho tôi câu trả lời .. vì vậy tôi cung cấp cho bạn gợi ý: DateTime.Parse (nowString, CultureInfo.GetCultureInfo ("vi")); –

+0

@ user846168: Nó không có nghĩa là một giải pháp mà là một câu trả lời _too-big-for-a-comment_. Đó là lý do tại sao tôi đánh dấu nó là CW. –

2

này được xác nhận là một lỗi.

Nếu bạn cần thêm thông tin về chủ đề này, hãy xem http://connect.microsoft.com/VisualStudio/feedback/details/822536/datetime-parse-result-in-exception-when-the-format-is-rfc1123-pattern-and-locale-is-a-latin-one

+0

Đây là nó, tôi đã có cùng một vấn đề ngày hôm nay. Có lẽ bởi vì trong tiếng Tây Ban Nha, March = Marzo, vì vậy với chuẩn RFC1123 .net không thể giải quyết "Mar" khi bạn đang ở miền địa phương "es" và họ không biết cách giải quyết lỗi này, vì vậy họ đóng nó là "won" t sửa chữa "(* facepalm *) – dbalboa

Các vấn đề liên quan