Tôi đang cố gắng để phân tích một chuỗi chứa mili giây như thế này:Phân tích cú pháp một DateTime chứa mili giây không thành công cho một số nền văn hóa nhất định. Tại sao?
string s = "11.05.2010 15:03:08.7718687"; // culture: de-CH DateTime d = DateTime.Parse(s); // works
Tuy nhiên, ví dụ dưới locale de-DE, tách thập phân là dấu phẩy (không phải là một dấu chấm). Vì vậy, ví dụ trở thành:
string s = "11.05.2010 15:03:08,7718687"; // culture: de-DE (note the comma) DateTime d = DateTime.Parse(s); // throws a FormatException
Đó là lạ với tôi rằng DateTime.Parse (s) nên ném một FormatException bây giờ vì nó là nghĩa vụ phải sử dụng CultureInfo.CurrentCulture để làm phân tích cú pháp. Ngay cả việc vượt qua CurrentCulture như một đối số một cách rõ ràng cũng không giúp gì cả. Có ai có một ý tưởng tại sao điều này không hoạt động? Không phân tích cú pháp lấy NumberFormatInfo.NumberDecimalSeparator vào tài khoản?
Trong những ngày trước khi định dạng thời gian phụ thứ hai được chuẩn hóa (ISO 8601: 2004 đã làm), thì không quan trọng dấu phân tách là gì. Vì vậy, các tiêu chuẩn thường không bao gồm những gì nên được sử dụng như là điểm thập phân cho lần thứ hai. Nó không phải là rõ ràng rằng thông tin định dạng số là chính xác, nhưng không nhất thiết phải là một lựa chọn tốt hơn. Chúng tôi đã vật lộn với vấn đề này gần đây (trong một bối cảnh hoàn toàn khác - không phải nền tảng Windows), và chưa đưa ra một hệ thống tốt cho nó. Cộng với khả năng tương thích ngược (in) cho chúng ta một vài nhức đầu. –