Проблема заключается в том, что в первом случае он делает предположение относительно того, что вы имеете в виду, и дает вам дату. Во втором случае он не может понять, что вы имеете в виду, и поэтому не разбирается. К счастью, TryParse
имеет механизм для сообщения о том, удалось ли это или нет, его возвращаемое значение. В то время как первое возвращает true, второе возвращает false
, и, следовательно, значение результата не имеет смысла и не должно быть проверено (хотя кажется, что это default(DateTime)
).
Как я упоминал в комментариях при использовании необычных форматов для строк DateTime, обычно лучше всего использовать DateTime.TryParseExact
. Это работает очень аналогично, за исключением того, что вы точно скажете, в каком формате вы ожидаете, что строка находится внутри, и она использует это для синтаксического анализа, а не для того, чтобы лучше всего предположить, что вы имеете в виду. Вам все равно нужно проверить возвращаемое значение, если вход был в неправильном формате (или у вас неверный указатель формата).
Вы выглядите так, как будто у вас есть нестандартный формат времени. Возможно, вам может понадобиться использовать «TryParseExact» и указать, что вы ожидаете от строки, чтобы избежать того, чтобы код мог догадаться в вашем формате - это предположение о том, что меняется между разными строками кода. – Chris
@Chris Позвольте мне проверить результат TryParseExact – tharif
Кажется, что он пытается сделать приличный удар в первом и получить _some_ datetime из него, но полностью не видит какой-либо допустимый формат вообще во втором, так что возвращение DateTime.MinValue вместо этого –