Что не так с этой строкой TimeSpan.ParseExact? - PullRequest
8 голосов
/ 06 апреля 2011

Я получаю исключение FormatError из этого вызова TimeSpan.ParseExact, но читаемая мной документация MSDN говорит, что этот формат должен быть правильным:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture);

Может кто-топожалуйста, скажите мне, почему это не работает?Я делаю почти то же самое с вызовом DateTime.ParseExact, и это прекрасно работает:

DateTime datetTime = DateTime.ParseExact("090820", "yyMMdd", CultureInfo.InvariantCulture);

Ответы [ 5 ]

15 голосов
/ 06 апреля 2011

TimeSpan не использует те же правила форматирования, что и DateTime.

Вы хотите Hhmmss, а не HHmmss.

Вы просматриваете не ту страницу в MSDN - вам нужно что-то вроде:

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx

5 голосов
/ 06 апреля 2011

С учетом более точной документации: http://msdn.microsoft.com/en-us/library/ee372287.aspx

Вам нужно использовать hh для часов, а не HH.

3 голосов
/ 06 апреля 2011

Согласно Строки пользовательского формата TimeSpan , часы обозначены как "h", а не "H".

Так что это прекрасно работает:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "hhmmss", 
                                        CultureInfo.InvariantCulture);

Документация, на которую вы ссылаетесь, относится к пользовательским строкам даты и времени , которые не совпадают. Они для DateTime.ParseExact и т. Д .; документация, на которую я ссылаюсь, предназначена для TimeSpan.ParseExact и т. д.

2 голосов
/ 06 апреля 2011

Разобрать строку в значение DateTime, затем вычесть ее значение Date, чтобы получить время в качестве TimeSpan:

DateTime t = DateTime.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture);
TimeSpan time = t - t.Date;
2 голосов
/ 06 апреля 2011

Вы пытаетесь использовать строки формата DateTime для анализа TimeSpan.TimeSpan имеет свои (немного отличающиеся) строки формата.См. Полный список MSDN: Строки пользовательского формата TimeSpan

В частности, измените HH на hh.Это даст вам:

TimeSpan timeSpan = TimeSpan.ParseExact("172100",
                                        "hhmmss", // Note this parameter
                                        CultureInfo.InvariantCulture);
...