2015-06-30 3 views
2

Переформулировка вопроса, найденного по адресу SO.Преобразование указанного строкового представления даты и времени в эквивалент DateTime

Код 1:

DateTime.TryParse("5-5-5-5" , CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal , out result); 

Код 2:

DateTime.TryParse("5-5-5-5.00" , CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal , out result); 

Если формат изменяется на 5-5-5-5.00 целые изменения результата, почему это происходит ли это, зависит от свойств культуры?

+1

Вы выглядите так, как будто у вас есть нестандартный формат времени. Возможно, вам может понадобиться использовать «TryParseExact» и указать, что вы ожидаете от строки, чтобы избежать того, чтобы код мог догадаться в вашем формате - это предположение о том, что меняется между разными строками кода. – Chris

+0

@Chris Позвольте мне проверить результат TryParseExact – tharif

+0

Кажется, что он пытается сделать приличный удар в первом и получить _some_ datetime из него, но полностью не видит какой-либо допустимый формат вообще во втором, так что возвращение DateTime.MinValue вместо этого –

ответ

1

ли, как в this ответ

Но они говорят, что система строка: «5-5-5-5» ужасная строка формата для даты. Строка формата будет выглядеть следующим образом: «d-M-y-h» в вашем случае, если я не понял

1

Проблема заключается в том, что в первом случае он делает предположение относительно того, что вы имеете в виду, и дает вам дату. Во втором случае он не может понять, что вы имеете в виду, и поэтому не разбирается. К счастью, TryParse имеет механизм для сообщения о том, удалось ли это или нет, его возвращаемое значение. В то время как первое возвращает true, второе возвращает false, и, следовательно, значение результата не имеет смысла и не должно быть проверено (хотя кажется, что это default(DateTime)).

Как я упоминал в комментариях при использовании необычных форматов для строк DateTime, обычно лучше всего использовать DateTime.TryParseExact. Это работает очень аналогично, за исключением того, что вы точно скажете, в каком формате вы ожидаете, что строка находится внутри, и она использует это для синтаксического анализа, а не для того, чтобы лучше всего предположить, что вы имеете в виду. Вам все равно нужно проверить возвращаемое значение, если вход был в неправильном формате (или у вас неверный указатель формата).

Смежные вопросы