2015-11-25 14 views
7

Gặp phải vấn đề về định dạng gửi đi.DateTime.TryParseExact C# định dạng hợp lệ và phân tích cú pháp

if (!DateTime.TryParseExact(dateString, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateOn)) 
{ 
    return false; 
} 
else if (!DateTime.TryParseExact(timeString, "hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out timeOn)) 
{ 
    return false; 
} 

return SaveWorkshop(id, name, dateOn, timeOn, capacity, description, duration, isCancelled); 

Sử dụng Bootstrap DateTimePicker, nó mất một chuỗi từ textbox ở định dạng

dateString = 2015/11/28 và timeString = 06:46

Nhưng trong kết quả Tôi có sai và đang phân tích cú pháp ngày mặc định. Điều gì có thể là vấn đề?

Trả lời

9

Đối với timeString, bạn cần sử dụng h thay vì chỉ định hh.

hh specifier cần số leading zero cho các chữ số đơn như 06. Bạn cần sử dụng h specifier để thay thế.

Đó là lý do tại sao số thứ hai DateTime.TryParseExact trả lại falsetimeOn của bạn sẽ là giá trị mặc định.

+0

"hh" không phải là trong thời gian 24 giờ. Liên kết bạn cung cấp thực sự nói điều đó. Nó dành cho thời gian 12 giờ không độn. "h" là cho thời gian 12 giờ không đệm, "H" là cho thời gian 24 giờ không đệm 0 và "HH" là cho thời gian 24 giờ không đệm. – jmcilhinney

+0

@jmcilhinney Có vẻ như bạn là người đầu tiên nhận ra lỗi của tôi :) Cảm ơn bạn rất nhiều. Tôi đã chỉnh sửa. –

2

Nếu tôi không nhầm, "hh" yêu cầu giờ hai chữ số mà bạn không có. Sử dụng "h" cho các giá trị khác 0.

0

Hơn nữa, phân tích cú pháp của bạn về thời gian trả về ngày hôm nay tại Midnight đã thêm TimeSpan từ phân tích timeString.

Vì vậy, để cắt đứt ngày hôm nay, làm một cái gì đó như thế này:

// snip .. 
DateTime datetimeOn = dateOn.Add(timeOn.TimeOfDay); 
return SaveWorkshop(id, name, datetimeOn, capacity, description, duration, isCancelled); 

hoặc, tất nhiên, sửa đổi SaveWorkshop để tạo datetimeOn nội bộ.

Sửa

Ngoài ra, bạn có thể phân tích trong một đi:

DateTime datetimeOn; 
DateTime.TryParseExact(dateString + timeString, "MM/dd/yyyyh:mm tt", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out datetimeOn); 
+0

Tôi đã sử dụng cách này trước đây, nhưng trên chế độ xem lưới, tôi muốn tách các cột ngày và giờ. – Antoshjke

+0

OK, nhưng bạn không thể kết nối chúng trước khi phân tích cú pháp? Xem chỉnh sửa. – Gustav

+0

Tôi đã chơi với nó. Nó hoạt động. Cảm ơn bạn! – Antoshjke

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