2013-07-23 45 views
8

Trong C# làm cách nào để phân tích cú pháp chuỗi định dạng "dd/mm/yyyy" hoặc định dạng "dd-mm-yyyy" thành datetime? Tôi nhận được thông báo lỗi cho biết chuỗi của tôi không đúng định dạng. Tôi cần để có thể phân tích tất cả các định dạng không chỉ là một trong số chúng.C# phân tích bất kỳ chuỗi định dạng ngày nào sang ngày giờ

+1

Hiện chúng tôi mã của bạn. – SLaks

+6

"Tôi cần có khả năng phân tích tất cả các định dạng" - cho rằng tồn tại cả định dạng 'dd/mm/yyyy' và' mm/dd/yyyy', bất kỳ ngày nào trong 12 tháng hoặc sớm hơn trong tháng phải mơ hồ - đó là một vấn đề không thể giải quyết được bằng máy tính. –

+0

Hiển thị cho chúng tôi mã bạn đã thử. –

Trả lời

8

mm nghĩa là phút, chữ hoa MM nghĩa là tháng.

Bên cạnh đó, bạn phải sử dụng CultureInfo.InvariantCulture nếu bạn muốn phân tích chuỗi với / như ngày separator vì đây là char thay thế cho dấu phân cách ngày văn hóa hiện tại của bạn:

Vì vậy, công trình này:

DateTime.ParseExact("23/07/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

Xem: The "/" Custom Format Specifier

+0

+1 cho mm so với MM. – Corak

1

Bạn có thể sử dụng phương pháp DateTime.ParseExact với bất kỳ định dạng được chỉ định nào.

var d = DateTime.ParseExact(token, "dd-MM-yyyy", 
      CultureInfo.InvariantCulture, 
      DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal); 
+0

Chuỗi định dạng của bạn sai. 'mm' là phút, không phải tháng. –

+0

@JohnKoerner cảm ơn vì đã bắt được điều đó. – doogle

3

Bạn cần xác định định dạng ngày nào bạn muốn chấp nhận. Không có điều gì như tất cả các định dạng. Một khi bạn xác định rằng bạn có thể vượt qua mảng định dạng để DateTime.ParseExact

Mã của bạn có thể trông như thế này:

string[] formats = new string[2] {"dd/MM/yyyy", "dd-MM-yyyy"}; 

string date = "23-02-2013"; 
try 
{ 
    DateTime result = DateTime.ParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal); 
} 
catch (FormatException) 
{ 
    // your error handling code here 
} 
8

Bạn có thể xác định bất kỳ định dạng mà bạn thích - ngoài ra bạn có thể nhận được một danh sách các giá trị mặc định cho một nền văn hóa nhất định.

var ci = new CultureInfo("en-US"); 
var formats = new[] { "M-d-yyyy", "dd-MM-yyyy", "MM-dd-yyyy", "M.d.yyyy", "dd.MM.yyyy", "MM.dd.yyyy" } 
     .Union(ci.DateTimeFormat.GetAllDateTimePatterns()).ToArray(); 

DateTime.ParseExact("07/23/2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 
DateTime.ParseExact("07-23-2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 
DateTime.ParseExact("23-07-2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 
DateTime.ParseExact("23.07.2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 

Output:

7/23/2013 12:00:00 AM 
7/23/2013 12:00:00 AM 
7/23/2013 12:00:00 AM 
7/23/2013 12:00:00 AM 
Các vấn đề liên quan