2015-06-06 3 views
2

Мне нужно получить экземпляр Date из входного файла. Я не знаю формат даты, но хочу получить его из настроек профиля пользователя.Java, дата из строки без шаблона

Te следующий код не работает:

DateFormat form = DateFormat.getDa​teInstance(DateF​ormat.SHORT, Locale.getDefaul​t()); 

try { 
    Date t = form.parse("6/6/2015"); 
} 

поддается синтаксического анализ Дата ошибки

Я хочу знать, есть ли способ, чтобы получить дату из строки, не зная, шаблон строки даты.

Мне нужна эта дата для создания MySQL-запроса. Может быть, есть еще один способ построить этот запрос без синтаксического анализа даты? Я использую Entity Beans.

+0

данные или дата? ... –

+0

Возможный дубликат [Анализ даты, заданной в неизвестном формате в стандартном формате в java?] (Http://stackoverflow.com/questions/11220618/parsing-a-date-given- in-unknown-format-to-standard-format-in-java) –

ответ

2

Я хочу знать, есть ли способ получить данные из строки, не зная шаблон строки данных.

Без любое подробная информация, это очень склонный к ошибкам. Например, рассмотрим «7/6/2015» - значит ли это 7 июня или 6 июля?

Если вы знаете локаль пользователя, вы можете сделать много лучше - к примеру, можно получить DateFormat экземпляры для длинных, средних, коротких и полных дат шаблонов для этой местности, и попробовать их по одному за раз. Однако имейте в виду, что в зависимости от того, где выполняется этот код, языковой стандарт по умолчанию (как вы сейчас используете) может быть не локали пользователя. Вы указываете настройки профиля пользователя - надеюсь, что уже содержит языковой стандарт.

Один из вариантов заключается в том, чтобы задать пользователю ответ о том, что представляет собой формат - может быть, представлено множество различных примеров, и пусть они выбирают тот, который соответствует.

Наконец, если файл имеет много дат, и вы уверены, что все они будут в одном формате, вы можете попытаться проанализировать все из них в каждом из нескольких разных форматов - это, скорее всего, уменьшит вероятность ошибки, так как «7/6/2015» становится недвусмысленной, если вы также видели «13/1/2015», например.

+0

«Например, рассмотрим« 7/6/2015 »- это означает 7 июня или 6 июля?» Я хочу получить формат из настроек профиля пользователя. Я не знаю, дата свиста верна. – Marianx

+0

@Marianx: Правильно, поэтому вы должны использовать локаль пользователя, которую я * надеюсь * находится в настройках профиля пользователя. Вы ничего нам не сообщили о том, что * * в настройках профиля пользователя, или это выполняется на машине пользователя или на веб-сайте или что-то в этом роде. Пожалуйста, прочитайте * весь * ответ. –

+0

Проблема в том, что я не могу спросить пользователя. В моем случае DateF ormat.SHORT возвращает значение 3, а ther - ошибка. – Marianx

4

Нет. Рассмотрим дату «1/2/2015»: это то, что 1 февраля или 2 января. Зависит от вашей локали.

Вместо этого, вы должны быть более конкретно: а не получать форматирование даты для вашей местности, используйте SimpleDateFormat с явным рисунком.

+0

Но если я не знаю узор? Я хочу иметь дело со многими возможными форматами даты. – Marianx

+1

@Marianx Иногда мы не можем получить то, что хотим. Без языковой информации или ограничения невозможно достоверно проанализировать числовую дату. Это не приятный факт. Я хотел, чтобы это было не так с тех пор, как новый молодой программист в 1970 году, я узнал об ужасно нелогичном формате MM/DD/YYYY. Мы по-прежнему должны жить. Я предлагаю вернуться к вашей информации о профиле пользователя и посмотреть, есть ли у вас или вывести локаль. –

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