2010-02-10 32 views
14

nếu tôi có chuỗi ngày giờ theo định dạng lạ, chẳng hạn như YYYY##MM##DD HH**M**SS, làm cách nào tôi có thể tạo cơ sở đối tượng datetime mới trên đó? tôi đã đọc điều gì đó về datetimeformatinfoclass nhưng không chắc chắn cách làm cho nó hoạt động ..Parse DateTime trong C# từ định dạng lạ

Trả lời

26

Bạn có thể sử dụng DateTime.ParseExact hoặc DateTime.TryParseExact cho dữ liệu mà bạn không tự tin trong Ví dụ:

using System; 

class Test 
{ 
    static void Main() 
    { 
     string formatString = "yyyy'##'MM'##'dd' 'HH'*'mm'*'ss"; 
     string sampleData = "2010##02##10 07*22*15"; 
     Console.WriteLine(DateTime.ParseExact(sampleData, 
               formatString, 
               null)); 
    } 
} 

Các dấu ngoặc kép trong chuỗi định dạng không phải là thực sự cần thiết - điều này sẽ làm việc. quá:

string formatString = "yyyy##MM##dd HH*mm*ss"; 

Tuy nhiên, sử dụng dấu ngoặc kép có nghĩa là bạn phải sử dụng ký tự giữa dấu ngoặc kép và không được hiểu là ký tự mẫu - vì vậy nếu bạn thay đổi "#" thành "/" phiên bản sử dụng dấu ngoặc kép chắc chắn sẽ sử dụng "/" trong khi rsion không sử dụng giá trị văn hóa cụ thể.

null trong cuộc gọi đến ParseExact có nghĩa là "sử dụng văn hóa hiện tại" - trong trường hợp này không có nhiều khác biệt, nhưng thay thế thường hữu ích là CultureInfo.InvariantCulture.

Thật không may là không có cách nào để BCL phân tích chuỗi định dạng và giữ lại thông tin; dự án Noda Time của chính tôi sửa chữa tình trạng này và tôi hy vọng nó sẽ làm cho việc phân tích cú pháp và định dạng nhanh hơn rất nhiều - nhưng nó không sẵn sàng cho sản xuất tại thời điểm này.

+2

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx có phân tích cú pháp có liên quan, nếu bạn đang cung cấp định dạng của riêng mìnhString – Tanzelax

7

Bạn có thể sử dụng phương thức DateTime.ParseExact và chuyển định dạng mình cần.

+0

đây là cách hiệu quả nhất để phân tích chuỗi 'chuỗi' thành' Ngày giờ '. phân tích cú pháp bằng '.Parse()' và '.TryParse()' không có thông tin định dạng là f..king damn slow! –

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