2016-11-11 8 views
1

У меня результаты времени из гонок во многих различных форматах (более или менее любой комбинации час, минуты, секунду и миллисекунде):DateTime.TryParseExact одна вторая

  • 01: 22: 51.15
  • 22: 15,12
  • 15,0
  • 12:21
  • ...

я анализирую их с список допустимых форматов и пока все форматы работают, кроме одного: один второй формат, например. "5".

По какой-то причине следующий список (содержащий «s» в качестве 1-го элемента) не помогает мне разобрать строку «5» в DateTime, «25» работает нормально.

var timeString = "5"; 
var timeFormats = new[] { "s", "s.f", "s.ff", "ss", "ss.f", "ss.ff", "m:ss", "m:ss.f", "m:ss.ff", "mm:ss", "mm:ss.f", "mm:ss.ff", "H:mm:ss", "H:mm:ss.f", "H:mm:ss.ff", "HH:mm:ss", "HH:mm:ss.f", "HH:mm:ss.ff" }; 
DateTime timeValue; 
DateTime.TryParseExact(timeString, timeFormats, null, DateTimeStyles.None, out timeValue); 

Любая идея, почему это не работает, как я ожидаю? Или есть более чистый способ охватить все эти форматы времени, не добавляя еще один пакет nuget ...? Приветствия!

+0

Я не думаю, что слишком много, чтобы спросить, что именно этот код дает вам в данный момент? «Это не работает» не так много. – Abion47

+0

Вы работаете со временем. Для этого используется 'TimeSpan', а не' DateTime'. – Luaan

+0

Извините, я имею в виду, что TryParseExact возвращает false. –

ответ

2

Поскольку в формате только один символ, он обрабатывается как the Sortable standard format, а не как пользовательский формат с секундами.

Чтобы изменить это, префикс пользовательского формата с символом %, как в "%s". См. "Using single custom format specifiers".

Также признайте, что если это фактические истекшие времена гонок, TimeSpan является более подходящей структурой данных, чем DateTime. Будьте внимательны при переключении, поскольку не все жетоны форматирования идентичны между двумя объектами. В частности, TimeSpan использует h в течение нескольких часов, а не H. См. Custom TimeSpan Format Strings.

+0

% s сделал трюк, спасибо. Я знаю TimeSpan, но я должен хранить его в базе данных как DateTime и поэтому разбирал его в DateTime. –

+2

Вы не должны хранить его как DateTime в базе данных. Вместо этого сохраните как количество секунд, или миллисекунды, или любую необходимую вам точность. Хранение как DateTime использует неправильный тип и может привести к ошибкам в будущем. –