2013-08-22 61 views
7

Tôi có định dạng ngày/giờ, ví dụ: "1-Mar-13 92230" Theo this documentthis link định dạng là như sau: "d-MMM-yy Hmmss", bởi vì:ngày và thời gian chuyển đổi trong C# - DateTime.ParseExact() không làm việc như mong đợi

Day is single digit, 1-30 
Month is 3 letter abbreviation, Jan/Mar etc. 
Year is 2 digits, eg 12/13 
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09) 
Minute is standard (eg 01, 52) 
Second is standard (eg 30, 02) 

tôi đang cố gắng để chạy đoạn mã sau vào chương trình của tôi, nhưng tôi cứ bị lỗi của "Chuỗi đã không được công nhận là một DateTime hợp lệ."

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture); 

Xin vui lòng trợ giúp, tôi không quen với chuyển đổi DateTime, nhưng tôi không thể thấy nơi tôi đã sai ở đây. Cảm ơn!

CẬP NHẬT: Đây có phải là do không thể phân tích cú pháp thời gian mà không có dấu hai chấm ở giữa? (Ví dụ: 1-Mar-13 9:22:30 được phân tích cú pháp, nhưng tôi có một nguồn bên ngoài dữ liệu đó sẽ là không thể để viết lại từ Hmmss để H: mm: ss)

Trả lời

4

Bạn có thể ấn định ngày của bạn:

var parts = "1-Mar-13 92230".Split(' '); 

if (parts[1].Length == 5) 
{ 
    parts[1] = "0" + parts[1]; 
} 

var newDate = parts[0] + " " + parts[1]; 

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss", System.Globalization.CultureInfo.CurrentCulture); 
+0

Điều này phù hợp với tôi. Được kiểm tra với ngày/giờ trong câu hỏi và "1-Mar-13 102230". Làm việc cho mọi trường hợp. Quan trọng nhất, nó là thuận tiện như xa như không sửa đổi các dữ liệu nguồn đi (ví dụ như thêm không gian, vv). Cảm ơn! – John

4

Từ msdn:

Nếu định dạng là mẫu định dạng tùy chỉnh không bao gồm ngày hoặc dấu phân cách thời gian (chẳng hạn như "yyyyMMdd HHmm"), hãy sử dụng văn bản bất biến cho thông số nhà cung cấp và biểu mẫu rộng nhất của mỗi định dạng tùy chỉnh chỉ định. Ví dụ: nếu bạn muốn chỉ định giờ theo định dạng , hãy chỉ định dạng rộng hơn, "HH", thay vì dạng hẹp hơn, "H".

vì vậy bạn có thể thử:

string input = "1-Mar-13 92330"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture); 
+0

này vẫn đưa ra ngoại lệ "Chuỗi đã không được công nhận là một DateTime hợp lệ". – Rex

+0

Tôi nhận xét thứ hai của Rex. Vì lý do gì, tôi vẫn nhận được ngoại lệ – John

+0

Điều này không chính xác, ngoại lệ vẫn còn đó – Anand

0

phút giờ và giây của bạn cần phải được tách ra, vì chúng không bị phân biệt.

string input = "1-Mar-13 9 23 30"; 
     var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss", System.Globalization.CultureInfo.CurrentCulture); 
1

chuỗi đầu vào của bạn đã được đi theo định dạng

string input = "1-Mar-13 092330"; 

Nếu bạn quay trở lại liên kết của bạn, nó nói

H 24-hour clock hour (e.g. 19) 

Bây giờ H là 24 giờ, cần được biểu diễn với hàng đầu 0. Nếu không tưởng tượng làm thế nào bạn sẽ xử lý các trường hợp giờ lớn hơn 9 tức là trong hai chữ số.

Nếu không phải giờ và Phút và Giây của bạn phải được tách riêng.

string input = "1-Mar-13 9 2330"; 

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture); 
Các vấn đề liên quan