2017-02-06 6 views
0

У меня есть список DateTime в виде строк: ДД.ММ.ГГГГ Н: мм: сс (время составляет 24 часа формат, но час одна цифра: 6 вместо 06)ParseExact DateTime Ошибка

  • 14.12.2016 6:20:21
  • 15.12.2016 8:30:00
  • 16.12.2016 12:30:00
  • 17.12.2016 14:33:00
  • 18.12.2016 18:10 : 00

Я пытаюсь разобрать точное строковые значения как объект DateTime, как это:

DateTime.ParseExact(dt, "dd.MM.yyyy H:mm:ss", CultureInfo.InvariantCulture) (дт является строковое значение из списка)

Проблема заключается в том, я получаю сообщение об ошибке сказав, что строка недействительный DateTime ...

В текущем формате первое и второе значения в списке работают нормально, когда он попадает в третью «boooom», я получаю ошибку.

Я что-то упустил в своем формате?

+2

Вы пробовали 'HH'? – Tim

+0

@Tim: Yeap, с 'HH', первое значение получит ошибку, а третье будет работать – user2818430

+0

@ Посмотрите на код, если он попробует' HH', он будет работать на 3 из 4 дат, потому что 'HH' часть этой строки '14.12.2016 6: 20: 21' ожидает, что время будет« 2 цифры », если оно было 14.12.2016 06: 20: 21', это не подведет. – MethodMan

ответ

4

Используйте перегрузку DateTime.ParseExact, который принимает массив допустимых форматов:

string[] formats = { "dd.MM.yyyy H:mm:ss", "dd.MM.yyyy HH:mm:ss" }; 
var result = DateTime.ParseExact(dt, formats, CultureInfo.InvariantCulture, 0); 

UPDATE: Как уже отмечалось, H должны соответствовать обоим однозначных и двузначных часов, так что-то другое продолжается. В моей системе успешно выполняется следующий код (.NET 4.5.2):

string dt = "16.12.2016 12:30:00"; 
var result = DateTime.ParseExact(dt, "dd.MM.yyyy H:mm:ss", CultureInfo.InvariantCulture); 
+1

'H' должен принимать часы от 0 до 23 включительно, так что это может просто скрыть другую проблему. – Steve

+0

Отлично! Это решило проблему! – user2818430

+0

Смотрите мой комментарий к OP об исходном входе, казалось бы, работающем изолированно. – Steve