Как разобрать дату из строки с помощью ParseExact?

#c# #datetime

#c# #дата-время

Вопрос:

Я пытаюсь проанализировать дату из строки, отформатированной следующим образом, "17/9/2020, 13:00:00" как допустимый DateTime объект, но после попытки использовать .ParseExact и установки шаблона даты я получаю ошибку:

Строка '17/9/2020, 13:00:00' не была признана допустимой DateTime ..

С помощью .ParseExact я пытаюсь сделать следующее:

 DateTime.ParseExact(quando.quando, "dd/MM/yyy, HH:mm:ss", null)
  

Комментарии:

1. Ваша строка формата имеет MM , что означает, что она ожидает двухзначный месяц. «9» содержит только одну цифру. Я подозреваю, что вы хотите M вместо MM — и, вероятно, d вместо dd тоже. Хотя, вероятно , вы этого хотите yyyy . (Я сомневаюсь, что у вас есть какие-либо даты до 1000 года.)

2. 99,9% вам нужно yyyy

3. @JonSkeet отсутствие y было синтаксической ошибкой, спасибо, что сообщили мне, на самом деле мне пришлось использовать single d , как вы предлагали, поскольку в такие дни, как 8 сентября, служба передавалась 8/9/2020 вместо 08

Ответ №1:

у вас 1 M слишком много и 1 y слишком мало:

 DateTime.ParseExact("17/9/2020, 13:00:00", "dd/M/yyyy, HH:mm:ss", null)
  

формат MM ожидает ввода всегда двух цифр для месяца, такого как 09 (сентябрь)

Если вы возьмете только 1 M, он также проанализирует 2-значный месяц, например декабрь:

 DateTime.ParseExact("17/12/2020, 13:00:00", "dd/M/yyyy, HH:mm:ss", null)
  

РЕДАКТИРОВАТЬ: взяв это из комментария Джона Скитса: вероятно, вам также следует использовать один d в течение нескольких дней, поскольку ваша строка даты, скорее всего, будет иметь следующий формат "7/9/2020, 13:00:00" .

 DateTime.ParseExact("7/9/2020, 13:00:00", "dd/M/yyyy, HH:mm:ss", null)
  

Комментарии:

1. будет ли она действительной в любом случае, если строка будет, 17/10/2020 если я использую single M ?

2. @KasperJuner Да, все будет в порядке.

3. @KasperJuner да, это будет, но это не работает так с цифрами года 😉 если у вас есть 4, вы должны указать также 4 раза y

4. отсутствие y было синтаксической ошибкой, думал, я ее вставил. в любом случае, я не знал о single M , который тоже разбирал две цифры. я бы принял ваш ответ через несколько минут

Ответ №2:

Ваш формат неверен. Смотрите пример здесь:https://dotnetfiddle.net/2ppjvX

Вы должны использовать этот формат «дд / М / гггг, ЧЧ: мм: сс». «ММ» ожидает 2 цифры типа «09». Также требуется 4 символа «y».