2012-03-30 23 views
6

Tôi gọi số DateTime.ParseExact của .NET bằng chuỗi định dạng tùy chỉnh dọc theo các dòng "MM/dd/yyyy h:mmt". Chuỗi này xử lý năm có bốn chữ số nhưng không xử lý được hai năm. Có cách nào để xử lý cả hai trường hợp trong một cuộc gọi ParseExact duy nhất không? Tôi đã thử "MM/dd/yy h:mmt" và nó chỉ xử lý trường hợp hai chữ số.Làm cách nào để tôi có thể chấp nhận cả hai chữ số và bốn chữ số năm với một cuộc gọi duy nhất tới DateTime.ParseExact?

Trả lời

19

Bạn có thể vượt qua một mảng các chuỗi định dạng cho tham số thứ hai trên quá tải này của ParseExact - điều này sẽ bao gồm cả các biến thể 2 và 4 năm.

DateTime.ParseExact(myDateTime, 
        new []{"MM/dd/yy h:mmt", "MM/dd/yyyy h:mmt"}, 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None) 
+0

cám ơn; điều đó thật tuyệt. Các định dạng có được thử theo thứ tự xuất hiện trong mảng không? Nó sẽ là tốt hơn để đặt định dạng bốn chữ số đầu tiên? –

+0

@WilliamGross - Tài liệu không chỉ định, nhưng rất có thể là có, chúng được thử theo thứ tự. Nó sẽ chỉ tốt hơn để đặt định dạng bốn chữ số đầu tiên nếu hầu hết các chuỗi dự kiến ​​để phân tích cú pháp sẽ có bốn chữ số năm. – Oded

0

Bạn luôn có thể chỉ cần sử dụng appropriate overload:

var date = DateTime.ParseExact(dateString, 
           new[] { "MM/dd/yyy h:mmt", "MM/dd/yy h:mmt" }, 
           new CultureInfo("en-US"), 
           DateTimeStyles.None); 
3

Gọi sự quá tải của DateTime.ParseExact chấp nhận một loạt các định dạng có thể:

DateTime dt = 
    DateTime.ParseExact(s, new[] { "MM/dd/yyyy h:mmt", "MM/dd/yy h:mmt" }, null, 0); 

Đối với số thứ ba, vượt qua null hoặc DateTimeFormatInfo.CurrentInfo nếu chuỗi ngày của bạn được bản địa hoá cho nền văn hóa hiện tại của người dùng; vượt qua DateTimeFormatInfo.InvariantInfo nếu chuỗi ngày của bạn luôn ở định dạng Hoa Kỳ.

Đối với đối số thứ tư, 0 tương đương với DateTimeStyles.None.

Xem MSDN Library documentation.

1

Sử dụng quá tải DateTime.ParseExact có chuỗi định dạng chuỗi.

MSDN:

string[] formats= {"MM/dd/yyyy h:mmt", "MM/dd/yy h:mmt"}; 


var dateTime = DateTime.ParseExact(dateString, formats, 
             new CultureInfo("en-US"), 
             DateTimeStyles.None); 
Các vấn đề liên quan