Ответ 1
Кроме того, проблема локали, DateTime.Parse()
также может генерировать исключение, которое вам нужно было бы поймать. Вместо этого используйте DateTime.TryParse()
или DateTime.TryParseExact()
.
Я просматривал Скотта Гензельмана Список вопросов о интервью для разработчиков, и столкнулся с этим вопросом:
Что не так с DateTime.Parse(туЗЬптд)?
Хотя я знаю, что существуют неотъемлемые риски при разборе строки неизвестного формата или источника, есть ли другие причины? Вместо этого использовать DateTime.ParseExact? Должно ли сначала быть myString.ToString()?
Кроме того, проблема локали, DateTime.Parse()
также может генерировать исключение, которое вам нужно было бы поймать. Вместо этого используйте DateTime.TryParse()
или DateTime.TryParseExact()
.
Использование текущей культуры потоков в системе часто является плохой идеей, так как это "попробуйте различные форматы и посмотрите, работает ли кто-нибудь из них".
ParseExact с определенной культурой является гораздо более контролируемым и точным подходом. (Даже если вы укажете текущую культуру, это делает более очевидным для читателей то, что происходит.)
Как MSDN Помещает:
Потому что метод Parse (String) пытается для синтаксического анализа строкового представления дату и время с использованием форматирования правила текущей культуры, попытки для разбора конкретной строки через разные культуры могут либо потерпеть неудачу, либо возвращать разные результаты. Если конкретный формат даты и времени будет проанализированы в разных местах, используйте DateTime.Parse(String, IFormatProvider) или один из перегрузки метода ParseExact и предоставить спецификатор формата.
Этот вопрос заключается в том, чтобы узнать, знает ли разработчик проблемы с этим. Сначала вы должны использовать TryParse, потому что Parse генерирует исключение, если оно невозможно. Кроме того, он не учитывает языковой стандарт, поэтому в веб-сценарии, если британский тип пользователя 02/10/2008, а мой сервер использует en-US locale, я получаю 10 февраля 2008 года вместо 2 октября 2008 года.
Могут быть и другие проблемы, но это первые два, которые возникли на ум.
В дополнение к неизвестному пользовательскому входу среда может быть неизвестна.., поэтому я предполагаю, что даже если вы управляете входным форматом, то, что ожидает синтаксический анализ, может отличаться.
Моя реакция кишки будет заключаться в том, что вы ударили ее неизвестными форматами/происхождением. Могут быть другие причины - например, из этой единственной строки, знаем ли мы, что myString
является строкой? (Я предполагаю, что это, конечно.)
Обычно я рекомендую метод TryParse. Он немного более подробный, но помогает предотвратить исключения - до тех пор, пока ваш код ведет себя надлежащим образом в случае недопустимого ввода.
Конечно, основываясь на вашей формулировке на этом... Я полагаю, вы уже все это знали.:)
этот пост в блоге объясняет это, но, как правило, нет никакой культурыinfo, связанной с анализом.
Ответ зависит от кода, который окружает DateTime.Parse(myString) и требований синтаксического анализа
Возможно, вы уже проверили, что строка является допустимым форматом на основе регулярного выражения, и вам может быть не интересно в информации о культуре. Вы также можете знать, что данные поступают из известного формата файла с известным соглашением даты, поэтому выбрасывание исключения может быть именно тем, что желательно.
Без контекста вопрос довольно неоднозначен, и реальный ответ на него должен быть "зависит от контекста, в котором используется код относительно того, что с ним не так, если