2010-01-04 2 views
35

Я пытаюсь создать Дата вроде этого:Конструктор Date (...) устарел. Что это значит? (Java)

date = new Date(year-1900,mon-1,day,hrs,min,sec); 

и Eclips дает мне это предупреждение: "конструктора Date (интермедиат, Int, Int, Int, Int) является устаревшим".

Что означает, что конструктор должен быть устаревшим? Что я могу сделать?

+0

Если вы собираетесь использовать даты, не забудьте по крайней мере посмотреть на Apache Commons lang; все виды утилит (среди которых DateUtils), что делает работу с датами (и строками) менее сложной. См. Http://commons.apache.org/lang/ – extraneon

ответ

37

Устаревшее буквально означает одобрял, но более точный перевод будет отставной. Устаревший означает, что этот метод по-прежнему можно использовать, но вы не должны его использовать. Он постепенно будет постепенно сокращаться. Существует новый способ сделать то же самое. Устаревшие методы помечены специальным Javadoc комментарий:

/** 
*@deprecated Please now use newMethod() 
*@see newMethod() 
*/ 

Использование:

  • Calendar.set(year + 1900, month, date, hrs, min)

или

  • GregorianCalendar(year + 1900, month, date, hrs, min).

Как предложено by the API documentation.

+1

В Java 5 и новее есть также @Deprecated аннотация (на самом деле 'java.lang.Deprecated'): http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html – Powerlord

+10

Я не понимаю, почему новая дата (2011,1,1) будет отменена в пользу создания объекта «Календарь», а затем его установки. – KalEl

+0

Если вы используете 'новый GregorianCalendar (...)', вам не нужно добавлять 1900 к году. –

4

Устаревшее означает, что это старый или старый способ сделать что-то, и его следует избегать.

В соответствии с настоящим документом http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html используйте Calendar.set(...).

2

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

16

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

Вместо этого, вы могли использовать Calendar API, так как полное сообщение, мы надеемся, предлагает Вам - или (лучше IMO), вы можете использовать Joda Time или java.time пакет в Java 8 (см tutorial). Оба из них - далекие превосходные API-интерфейсы даты/времени. к

Когда дело доходит до устаревших интерфейсов, если сообщение компилятора не предложить альтернативу, это всегда стоит смотреть на Javadoc - что в данном случае предлагает использовать Calendar.set(...).

+0

+1 спасибо за ссылку Joda, которая выглядит очень красиво. –

+0

Если нет лучшего метода для использования, но использование существующего метода является опасным, мы можем использовать устаревшее или должна быть новая альтернатива? – kamaci

+0

@kamaci: В соответствии с моим ответом вы должны использовать «Календарь» или «Время Джоды». –

4

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

В вашем случае вы можете использовать класс java.util.Calendar вместо java.util.Date.

Кстати, в Java 8 и более поздних версиях эти старые классы вытесняются новыми java.time package (Tutorial). Вдохновленный Joda-Time, определенный JSR 310 и расширенный проектом ThreeTen Extra. Старые классы остаются на месте, и вы можете продолжать использовать их (избегая при этом их устаревших частей), но вам предлагается перейти на новые классы.

+0

На самом деле, оба .Date и .Calendar теперь вытеснены новым пакетом [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html), встроенный в Java 8 и более поздние версии. –

+0

@BasilBourque, вы отвечаете на ответ более пяти лет назад. – missingfaktor

+0

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

0

Устаревшее обычно означает, что вам не рекомендуется использовать эту функцию.

По той или иной причине было решено, что Java будет лучше без него (поскольку существует более эффективная альтернатива, и вы должны использовать это вместо этого), и поэтому может быть удален из будущей версии Ява. Отсрочка - это в основном предупреждение о том, что «это, вероятно, будет удалено в будущем, хотя мы держим его немного дольше, чтобы дать вам возможность сначала удалить его из вашего кода»

+0

Есть больше, чтобы избежать этого, чем просто «тогда ваш код не сломается, если он будет удален» - обычно это лучший способ сделать это в первую очередь (например, более быстрая, более надежная, лучшая поддержка i18n и т. Д.). –

+0

true, это обычно не рекомендуется, потому что существует лучшая альтернатива. – jalf

1

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

1

Ниже приведен фрагмент кода, который поможет с переводом кода. Оба изображения одинаковы.

import java.util.Calendar; 
import java.util.Date; 

public class Tinker { 

    public static void main(String[] args) { 

     int Y = 2015; // Year 2015 
     int M = 11; // 0..11 -- December 
     int D = 15; // 15th 
     int H = 16; // 4:00 PM 
     int MN = 28; // 4:28 PM 
     int S = 41; // 4:28:41 

     Date d = new Date(Y-1900,M,D,H,MN,S); 

     System.out.println(d); 

     Calendar c = Calendar.getInstance(); 
     c.set(Y, M, D, H, MN, S); 

     d = c.getTime(); 
     System.out.println(d);      

    } 

} 

Выход:

Tue Dec 15 16:28:41 CST 2015 
Tue Dec 15 16:28:41 CST 2015 
0

Устаревшие означает ядро ​​API и другие библиотеки Java не зависит от него, и он говорит, что у вас есть лучший способ (ы).

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