Устаревшие методы даты в Java?

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

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

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

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

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

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

EDIT - я вернулся и использовал

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



Дата в формате MM/DD / YYY, как 07/23/2010, но я получаю ParseException

от чего это может быть?

10 ответов


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

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

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


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

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


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

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


для редактировать этого

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

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

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


Что Означает "Устаревший"

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

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

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

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


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


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


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

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

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


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

для вашего редактирования вам нужно правильно инициализировать SimpleDateFormat, чтобы он знал, какой формат входит. Для 07/22/1978 формат:

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


как сказал другой, java.утиль.Методы Date были устаревшими, потому что команда Java считала, что у них есть лучшее решение в java.утиль.Календарь.

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

Итак, да, вы должны избегать устаревших методов из уважения к их заменам. Но теперь эти замены (.Календарь) есть замена (java.время.)

java.время

все старые дата-время классы были вытеснены java.время фреймворк, встроенный в Java 8. Новые классы вдохновлены очень успешными Joda Времени framework, предназначенный в качестве его преемника, похожий по концепции,но перестроенный. Определяется 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.время делает тяжелый подъем в определении определенного локализованный формат.


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

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