Недопустимый формат C# TimeSpan.Parse возвращает неверное значение вместо исключения.

TimeSpan.Parse("23:00:00") возвращает 23 часа.

TimeSpan.Parse("24:00:00") возвращает 24 дня!

Я понимаю, что допустил ошибку в том, что допустимый диапазон часов 0-23. Но в течение нескольких минут и секунд, если вы попытаетесь проанализировать значение вне допустимого диапазона, вы получите исключение. В случае часов со значением вне диапазона синтаксический анализатор неправильно предполагает, что вы имели в виду дни, а не часы.

Кто-нибудь может это объяснить?

Этот пример здесь охватывает именно эту тему и показывает, что http://msdn.microsoft.com/en-us/magazine/ee309881.aspx

То же самое относится и к TryParse. Я получаю 24 дня, несмотря на то, что в документах говорится, что синтаксический анализ должен завершиться ошибкой.

http://msdn.microsoft.com/en-us/library/3z48198e

//            String to Parse                TimeSpan
//            ---------------   ---------------------
//                          0        00:00:00
//                         14     14.00:00:00
//                      1:2:3        01:02:03
//                  0:0:0.250        00:00:00.2500000
//             10.20:30:40.50     10.20:30:40.5000000
//        99.23:59:59.9999999     99.23:59:59.9999999
//        0023:0059:0059.0099        23:59:59.0099000
//                     23:0:0        23:00:00
//                     24:0:0   Parse operation failed.
//                     0:59:0        00:59:00
//                     0:60:0   Parse operation failed.
//                     0:0:59        00:00:59
//                     0:0:60   Parse operation failed.
//                        10:   Parse operation failed.
//                       10:0        10:00:00
//                        :10   Parse operation failed.
//                       0:10        00:10:00
//                     10:20:   Parse operation failed.
//                    10:20:0        10:20:00
//                       .123   Parse operation failed.
//                    0.12:00        12:00:00
//                        10.   Parse operation failed.
//                      10.12   Parse operation failed.
//                   10.12:00     10.12:00:00

Я нашел ошибку или что-то делаю не так?

РЕДАКТИРОВАТЬ: Я тестировал это в LinqPad и с помощью консольного приложения в .NET4 в 64-разрядной версии Windows 7.

            var result = TimeSpan.Parse("24:00:00");
            Console.WriteLine(result);
            result = TimeSpan.Parse("24:00:00", CultureInfo.InvariantCulture);
            Console.WriteLine(result);

В результате получается:

24.00:00:00
24.00:00:00

19
задан Dan Bailiff 22 June 2012 в 15:22
поделиться