2011-08-26 15 views
7

thể trùng lặp:
DateTime.TryParse century control C#DateTime TryParse - lập bản đồ '99' đến 2099, không 1999

tôi cần phải TryParse một chuỗi như sau: "01/01/99 "vào một đối tượng DateTime, và tôi đang sử dụng một cái gì đó như thế này:

DateTime outDate; 
if (DateTime.TryParseExact("01/01/99", "dd/MM/yy", null, System.Globalization.DateTimeStyles.None, out outDate)) 
{ 
    //Do stuff here 
} 

Tất nhiên, ngày này được phân tích cú pháp như 1999/01/01, đó là không phải những gì tôi muốn - Tôi muốn nó phân tích năm 2099. Có cách nào dễ dàng để làm điều này không? Đáng buồn thay đổi dữ liệu tôi đang phân tích cú pháp để bao gồm cả năm không phải là một tùy chọn.

+7

Chúng ta không học được gì từ Y2K? :( –

+0

IIRC, có một ngưỡng năm để xác định thế kỷ dựa trên năm có 2 chữ số. Tôi không chắc liệu ngưỡng đó có thể thay đổi thông qua cấu hình hay không. 01 –

+1

nên hai năm chữ số luôn được suy ra là '20yy'? –

Trả lời

5

Lấy từ this answer, bạn có thể cung cấp ParseExact() với đối tượng văn hóa. Nghi ngờ TryParseExact() sẽ giống nhau:

CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.LCID); 
ci.Calendar.TwoDigitYearMax = 2099; 
//Parse the date using our custom culture. 
DateTime dt = DateTime.ParseExact(input, "MMM-yy", ci); 
+0

Tuyệt vời, hãy xử lý - cảm ơn! – Chris

0

Đây là cài đặt khu vực. Trong Windows 7, bạn có thể chỉnh sửa trong Pa-nen Điều khiển> Đồng hồ, Ngôn ngữ và Vùng> Khu vực và Ngôn ngữ. Trên tab định dạng, nhấn nút Nâng cao và xem dưới ngày.

Tắt đầu, tôi không biết cách nào để thay đổi điều này, nhưng nếu bạn đặt nó trong bảng điều khiển, ứng dụng của bạn sẽ sử dụng nó miễn là bạn không thay đổi văn hóa.

Điều đó nói rằng, bạn thực sự cần phải đánh bại bất cứ ai đang cung cấp cho bạn dữ liệu này với một vật nặng. Chúng ta nên loại bỏ loại vô nghĩa Y2K này 12 năm trước.

chỉnh sửa - liên kết nhận xét của dan04 cũng có một số tùy chọn.

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