Tôi có chuỗi giống như sau: "9/1/2009". Tôi muốn chuyển đổi nó thành một đối tượng DateTime (sử dụng C#).Tại sao không thể DateTime.ParseExact() phân tích cú pháp "9/1/2009" bằng cách sử dụng "M/d/yyyy"
này hoạt động:
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));
Nhưng tôi không hiểu tại sao điều này không làm việc:
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);
Không có từ nào trong ngày (như "September"), và tôi biết định dạng cụ thể, vì vậy tôi muốn sử dụng ParseExact (và tôi không thấy lý do tại sao CultureInfo là cần thiết). Nhưng tôi tiếp tục nhận được sự sợ hãi "String đã không được công nhận như là một ngoại lệ DateTime hợp lệ".
Cảm ơn
Một chút theo dõi. Dưới đây là 3 cách tiếp cận phù hợp:
DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));
Và đây là 3 mà không làm việc:
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"));
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);
Vì vậy, Parse() làm việc với "en-US", nhưng không ParseExact ... Bất ngờ?
Bạn đang sử dụng phiên bản .NET nào? Khi tôi thực hiện dòng thứ hai ở trên trong PowerShell v2 trên Win7, nó hoạt động tốt. – Lee
Tôi đang sử dụng .net 3.5 trên xp. Văn hóa mặc định là en-us. – Jimmy
Trong chuỗi '" M/d/yyyy "', mỗi dấu gạch chéo '/' được thay thế bằng chuỗi 'culture.DateTimeFormat.DateSeparator'. Khi bạn cung cấp 'null' làm nhà cung cấp định dạng, văn hóa hiện tại được sử dụng. Bây giờ nó phụ thuộc vào việc văn hóa hiện tại có '"/"' hay một số chuỗi khác (như '" - "' hay '". "') Là ['DateSeparator'] của nó (http://msdn.microsoft.com/) en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx). –