Строка не была распознана как действительный DateTime, потому что день недели был неверным - PullRequest
1 голос
/ 30 марта 2020

У меня есть эта простая строка кода:

DateTime.ParseExact("Mon 7:00 PM", "ddd h:mm tt", CultureInfo.InvariantCulture)

Если вы запустите этот код 6 дней в неделю, он выдаст это исключение:

System.FormatException: String was not recognized as a valid DateTime because the day of week was incorrect.

Если вы запустите в понедельник все будет в порядке. Есть ли способ правильно разобрать эту строку?

1 Ответ

5 голосов
/ 30 марта 2020

К сожалению, DateTime.Parse (Exact) всегда будет возвращать полный DateTime, полный с датой.

Если вы опускаете какие-либо детали, детализирующие дату, по умолчанию это будет сегодняшняя дата. 6 из 7 дней в неделю, которые не будут соответствовать шаблону, в котором указано понедельник, и именно поэтому вы получаете это исключение.

ParseExact не будет пытаться найти соответствующее значение DateTime.

Для Например, если вы запустите это:

ParseExact("Mon 30.03", "ddd dd.MM", culture)

, это сработает в этом году, потому что 30 марта 2020 года - понедельник. Однако в 2021 году 30 марта будет во вторник, и, таким образом, он снова потерпит неудачу. ParseExact не будет пытаться найти подходящий год, который будет иметь 30 марта в понедельник, и это то же самое, что и указать понедельник. Он не будет пытаться выяснить, о каком понедельнике вы говорите.

Короче говоря, вам нужно будет найти другой способ сделать это.

Полагаю, вам следует отступить от ParseExact и спросите себя, как точно должен переводиться "Пн 30.03" в указанную c дату в конкретный c год. Что такое лог c. Затем вы можете попытаться найти правильный метод для вызова или, скорее всего, написать код для этого.

...