2013-08-21 39 views
10

Phương thức TryParseExact trong khối mã bên dưới trả về true.
Tôi muốn biết lý do.
Tôi nghĩ ngày này "2013.03.12" không hợp lệ vì điều này không được phân tách bằng dấu gạch chéo nhưng dấu chấm.TryParseExact trả về false, mặc dù tôi không biết tại sao

Sau khi tôi thay đổi CultureInfo"de-De" thành "en-US", phương thức trả về false. Đây có thể là một gợi ý nhưng tôi vẫn không biết tại sao điều này lại xảy ra.

var format = new string[] { "yyyy/MM/dd" }; 
var parsed = new DateTime(); 
var result = DateTime.TryParseExact("2013.03.12", format, 
      new CultureInfo("de-DE"), DateTimeStyles.None, out parsed); 
+0

BTW: '2013.03.12' không phải là định dạng ngày hợp lệ/bình thường của Đức. '12.03.2013' sẽ là. –

Trả lời

17

Tôi nghĩ rằng hiện tại DateSeparator. (dot) của bạn và / automaticly thay thế bản thân với nó.

/ seperator có một ý nghĩa đặc biệt của "thay thế tôi với tách ngày văn hóa hiện tại của"

CultureInfo c = new CultureInfo("de-DE"); 
Console.WriteLine(c.DateTimeFormat.DateSeparator); //Prints . (dot) 

Hãy xem The "/" Custom Format Specifier

+3

Rất thú vị, không biết rằng –

+0

@lazyberezovsky Vâng, tôi đã không nhận thức được điều này kể từ khi Tim Schmelter [điểm] (http://stackoverflow.com/questions/17526239/converting-datetime-to-string/17526314 # comment25485437_17526239) tình huống này gần một tháng trước. –

+1

Cảm ơn bạn rất nhiều. Đôi khi, tôi không phải xác định định dạng theo quốc gia trong đặc điểm kỹ thuật này. – Nigiri

7

Như @Soner Gonul points out, các / được thực hiện như "dấu phân cách ngày" trong custom format strings. Nếu bạn chỉ muốn chấp nhận / ký tự, bạn cần phải thoát khỏi chúng:

var format = new string[] { @"yyyy\/MM\/dd" }; 
+3

A @ xin vui lòng trước " – xanatos

+0

@xanatos - bắt tốt. –