Устаревшие методы Date в Java? - PullRequest
8 голосов
/ 29 июля 2010

Что на самом деле подразумевается при использовании утилит Java Date и что-то устарело. Означает ли это, что его не рекомендуется использовать или это запрещено?

Я предполагаю, что использование устаревших методов - это плохая практика, но я не уверен и хотел это выяснить.

Например, я пытаюсь использовать код, подобный следующему

String date = request.getParameter("date"); 
model.setDate(new Date(date));

Конечно ... это пример высокого уровня, но в этой ситуации моя модель использует тип Дата , и мне нужно извлечь дату из запроса в виде строки и создать с ней дату .

Он отлично работает, как у меня, но использует устаревший метод.

РЕДАКТИРОВАТЬ - я вернулся и использовал

SimpleDateFormat formatter = new SimpleDateFormat(); <br>
model.setDate(formatter.parse(request.getParameter("date");</b>



Дата указывается в формате ММ / ДД / ГГГ, например 23.07.2010, но я получаю ParseException

Откуда это может быть?

Ответы [ 10 ]

6 голосов
/ 29 июля 2010

Вы правы, что это плохая практика. Почти во всех случаях устаревшие методы сообщают вам, что использовать вместо этого, и это не исключение (см. Javadocs ).

Вы пытаетесь создать Date из String. Но в каком формате находится строка? Как это должно быть проанализировано? Это формат даты в Великобритании или США?

«Правильный» способ сделать это - создать экземпляр SimpleDateFormat и вызвать его метод parse(), передавая вашу текстовую строку. Это гарантированно сработает в будущем и будет более надежным.

3 голосов
/ 29 июля 2010

Многие люди упоминали, что означает «Устаревшие», но я не вижу никакого объяснения того, почему эти методы устарели:

Sun (до того, как они стали частью Oracle) устарела для ряда методов в Date, чтобы заставить людей использовать классы Calendar / GregorianCalendar для манипуляции датами.

3 голосов
/ 29 июля 2010

Устаревшие объекты или методы просто означают, что если вы хотите использовать их в текущем проекте, лучше используйте то, что рекомендуется .Причина, по которой они все еще существуют, заключается в устаревших кодах, которые использовали устаревший метод до того, как был объявлен устаревшим.Типичным примером является StringTokenizer против String.split() метод.

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


Для вашего EDIT выполните это

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 

model.setDate(formatter.parse(request.getParameter("date")));

ParseException вызывается, так как вы не предоставили структуру формата даты, поэтому SimpleDateFormat не знал, как была структурирована ваша дата.

2 голосов
/ 29 июля 2010

Вы правы, не рекомендуется использовать устаревшие методы. Это связано с тем, что в некоторых ситуациях эти методы могут иметь проблемы или были заменены более оптимистичными решениями, а также будущие версии могут их не поддерживать.

2 голосов
/ 29 июля 2010

Что означает «Устаревший»

Возможно, вы слышали термин «самоуничижительный юмор» или юмор, который сводит к минимуму важность говорящего.Устаревший класс или метод подобен этому.Это больше не важно.Фактически, это настолько неважно, что вы больше не должны его использовать, поскольку оно было заменено и может прекратиться в будущем.

Java предоставляет способ выразить устаревание, потому что по мере развития классаего API (интерфейс прикладного программирования) неизбежно меняется: методы переименовываются для обеспечения согласованности, добавляются новые и более совершенные методы, а поля изменяются.Но такие изменения создают проблему.Вам нужно сохранить старый API до тех пор, пока разработчики не перейдут на новый, но вы не хотите, чтобы они продолжали программировать на старый API.

Возможность отказаться от класса, метода или членаполе решает проблему.Java поддерживает два механизма устаревания: и аннотацию (поддерживается начиная с J2SE 5.0) и тег Javadoc (поддерживается начиная с версии 1.1).Существующие вызовы старого API продолжают работать, но аннотация заставляет компилятор выдавать предупреждение, когда он находит ссылки на устаревшие программные элементы.Тег Javadoc и связанные комментарии предостерегают пользователей от использования устаревшего элемента и говорят им, что использовать вместо них. Что использовать вместо этого.

http://download -llnw.oracle.com / javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html

1 голос
/ 29 июля 2010

В общем, когда Sun (Oracle, что угодно) объявляет метод Java устаревшим, это означает, что они передумали включать его, они отговаривают вас от его использования и могут удалить его в какой-то будущей версии. Конечно, вероятно, пройдет много времени, прежде чем он будет удален, поскольку кто знает, сколько существует существующего кода, использующего его, и какой смысл ломать существующие программы только потому, что изобретатели Java считают, что теперь у них есть лучшее представление о том, как что-то сделать?

Предположительно, у них была веская причина для того, чтобы что-то осудить, поэтому вам следует выяснить, ПОЧЕМУ говорят, что какая-то более новая функция лучше.

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

1 голос
/ 29 июля 2010

Устаревший означает, что планируется удалить, потому что он глючит или по другой причине. Лучше использовать SimpleDateFormat.parse (); для анализа ваших строк.

0 голосов
/ 07 декабря 2015

Как уже говорилось, методы java.util.Date устарели, потому что команда Java считала, что у них есть лучшее решение в java.util.Calendar.

К сожалению, этот класс также оказался запутанным, хлопотным и плохо продуманным.

Так что, да, вы должны избегать устаревших методов из-за их замены.Но теперь эти замены (.Calendar) имеют замену (java.time).

java.time

Все старые классы даты и времени были вытеснены java.timeФреймворк , встроенный в Java 8. Новые классы основаны на очень успешном фреймворке Joda-Time , задуманном как его преемник, похожем по концепции, но с измененной архитектурой.Определяется JSR 310 .Расширена проектом ThreeTen-Extra .См. Учебное пособие .

. Используйте пакет java.time.format для анализа и генерации строковых представлений значений даты и времени.

String input = "07/23/2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM/dd/yyyy" );

новые классы включают LocalDate для представления значения только для даты без времени суток.

LocalDate localDate = LocalDate.parse( input , formatter );

Если вы вызываете toString в LocalDate, вы получаете строковое представлениезначение даты в стандартном формате ISO 8601 , ГГГГ-ММ-ДД.Чтобы создать строку в других форматах, определите другой форматер.Или вызовите методы localize, чтобы java.time проделал большую работу по определению определенного локализованного формата.

0 голосов
/ 29 июля 2010

устарело : то, что существует в текущей версии Java, но в какой-то момент будет удалено из будущих версий.

Для редактирования необходимо правильно инициализировать SimpleDateFormat, чтобы он знал, какой формат поступает. Для 22.07.1978 формат:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

0 голосов
/ 29 июля 2010

Ничего не сломается, если вы их используете ... пока.

Но они вполне могут быть удалены в будущих версиях.

...