2016-05-17 7 views
3

Я часто использую Date.parse(String), чтобы разобрать дату в неизвестном формате. Кажется, что это хорошо работает для моих случаев использования до сих пор, но мне интересно, почему это было устаревшим, и следует ли мне избегать этого? Документы просто сказать:Является ли Date.parse() в Java безопасным для использования, хотя он устарел? Если нет, существует ли жизнеспособная альтернатива?

As of JDK version 1.1, replaced by DateFormat.parse(String s) 

Однако, нет никакого статического метода синтаксического анализа в DateFormat, просто an instance method, который требует DateFormat объекта, который не будет иметь для неизвестного формата дата.

Так мне интересно ...

  • Есть ли официальное заявление, где из Java-дизайнеров о том, почему они выбрали принизить его?
  • Если этот метод отлично подходит для моих случаев использования до сих пор, могу ли я полагаться на эту функциональность, доступную в будущих версиях Java?
  • Есть ли жизнеспособная альтернатива, которая не устарела для разбора строки, которая находится в одном из многих возможных общих форматов даты?
+1

_It принимает много синтаксисов_ –

+2

IMHO весь 'Date' * class * должен был быть устаревшим. – Bohemian

+0

@Bohemian - Есть ли хорошая замена? –

ответ

1

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

SimpleDateFormat format = new SimpleDateFormat(pattern); 
Date date = format.parse(strDate) 

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

Так что если вы используете Java 8, я настоятельно рекомендую вам использовать напрямую DateTimeFormat, если у вас есть предыдущая версия, вы должны использовать SimpleDateFormat, как указано выше.

Что вам нужно сделать, это:

  1. Чтобы перечислить все шаблоны, которые нужно поддерживать в вашем коде
  2. Поместите их в коллекцию или массив
  3. Тогда не проверить каждый из них до тех пор, метод parse(String) не поднимает ParseException, что-то вроде this
+0

Проблема в том, что вам нужен шаблон. Я работаю с несколькими различными системами управления версиями, которые разливают свои даты по-разному, оба из которых Date.parse() обрабатывают ОК. –

+0

Каким образом это отвечает на вопрос OPs? – stuXnet

5

Date.parse (String) устарела, потому что не интернационализировать мы LL. SimpleDateFormat или Calendar.

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

+2

Итак, каков правильный способ анализа даты, когда вы не знаете точного синтаксиса и хотите, чтобы Java старалась изо всех сил? –

+2

http://stackoverflow.com/questions/3389348/parse-any-date-in-java – assylias

+1

@RobertFraser Они не устарели 'Date.parse', потому что хотели, чтобы вы использовали что-то еще, они хотели отказаться от этого способа думать вместе. Для пользовательских интерфейсов используйте кнопки выбора даты. Для хранения используйте время эпохи. Для ввода текстового текста укажите список форматов. Не попадайте в ситуацию, когда вам приходится интерпретировать данные, которые вы не знаете смысла. –

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

  • Нет связанных вопросов^_^