Bạn cần phải sử dụng DateTime.ParseExact
với định dạng "dd/MM/yyyy"
DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
nó an toàn hơn nếu bạn sử dụng d/M/yyyy
cho định dạng, vì đó sẽ xử lý cả hai chữ số đơn và đôi chữ số ngày/tháng. Nhưng điều đó thực sự phụ thuộc nếu bạn đang mong đợi các giá trị số đơn/đôi.
định dạng ngày tháng của bạn day/Month/Year
có thể là một dạng ngày chấp nhận được đối với một số nền văn hóa. Ví dụ đối với văn hóa Canada en-CA
DateTime.Parse
sẽ làm việc như:
DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));
Hoặc
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture
Cả dòng trên sẽ làm việc vì định dạng của chuỗi là chấp nhận được đối en-CA
văn hóa. Vì bạn không cung cấp bất kỳ nền văn hóa nào cho cuộc gọi DateTime.Parse
, văn hóa hiện tại của bạn được sử dụng để phân tích cú pháp không hỗ trợ định dạng ngày. Đọc thêm về nó tại DateTime.Parse.
Một phương pháp để phân tích cú pháp được sử dụng DateTime.TryParseExact
DateTime dt;
if (DateTime.TryParseExact("24/01/2013",
"d/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt))
{
//valid date
}
else
{
//invalid date
}
Các TryParse
nhóm các phương pháp trong khuôn khổ Net không ném ngoại lệ trên các giá trị không hợp lệ, thay vào đó họ trả về một giá trị bool
cho thấy sự thành công hay thất bại trong phân tích cú pháp.
Thông báo rằng tôi đã sử dụng một lần d
và M
cho ngày và tháng tương ứng. Độc thân d
và M
hoạt động cho cả hai chữ số đơn/đôi ngày và tháng.Vì vậy, cho định dạng d/M/yyyy
giá trị hợp lệ có thể là:
- "24/01/2013"
- "24/1/2013"
- "2013/04/12" // ngày 4 tháng 12 năm 2013
- "2013/04/12"
Đối với đọc thêm bạn sẽ thấy: Custom Date and Time Format Strings
Cảm ơn rất nhiều. Tôi đã thử DateTime.ParseExact() nhưng tôi đoán mẹo là với null là đối số thứ ba. Tôi đã sử dụng CultureInfo.InvariantCulture thay vào đó sẽ cung cấp cho tôi một lỗi biên dịch. –
@ user1872530, bạn được chào đón, nó nên đã làm việc cho bạn, nhưng tôi đoán bạn đang thiếu bằng cách sử dụng tuyên bố cho System.Globalization, vì vậy hãy thử 'System.Globalization.CultureInfo.InvariantCulture' thay vào đó, – Habib
Cảm ơn. Tôi đã sử dụng "dd/MM/yyyy" và phân tích cú pháp không thành công cho "3/12/2016", thay đổi thành "d/M/yyyy" làm giá trị ngày và tháng <10 không còn cần phải được thêm trước bằng 0. – ComeIn