Подтвердить что ты не робот

Параметрированные конструкторы класса java.util.Date устарели. Какая альтернатива?

Что я могу использовать, чтобы заменить это, new Date(2009, 12, 9)?

Спасибо за вашу помощь.

4b9b3361

Ответ 1

В идеале используйте Joda Time. Это бесконечно превосходный API для встроенного. Затем вы захотите выбрать LocalDateTime и DateTime в зависимости от ваших точных требований (это сложная область - я не собираюсь подводить итоги в предложение или два, но docs выполняйте хорошую работу).

Если это абсолютно необходимо, используйте java.util.Calendar и преобразуйте его в Date, когда вам нужно.

Ответ 2

Календарь!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Обратите внимание, что я не поставил 12 за декабрь, потому что на самом деле 11 (январь равен 0).

Затем вы можете легко добавлять или удалять секунды, минуты, часы, дни, месяцы или год:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

И, наконец, если вам нужна дата:

cal.getTime();

Ответ 3

Если вы посмотрите на Javadoc, он указывает на использование Calendar.

Начиная с версии JDK версии 1.1, заменяемой Calendar.set(год + 1900, месяц, date, hrs, min) или GregorianCalendar (год + 1900, месяц, дата, час, мин).

Если вы посмотрите на параметры конструктора Date, вы увидите, почему он устарел:

Параметры:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

year не то, что вы ожидаете, и не month.

Чтобы представить дату, о которой вы упомянули, вам нужно позвонить Date, как этот (не рекомендуется)

new Date(2009-1900, 12-1, 9)

Альтернативой, использующей Calendar, является

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();

Ответ 4

Вы также можете использовать объект SimpleDateFormat:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}

Ответ 5

Тим, в ваших комментариях вы упомянули, что делаете это в контексте GXT, то есть в коде клиента GWT. GWT не поддерживает GregorianCalendar, и вы, скорее всего, не сможете поставить JodaTime через GWTCompiler (вы можете быть в состоянии, но действительно хотите).

Я думаю, что вы действительно хотите использовать JNSI, если хотите выполнять календарные операции в GWT. См. Класс Date в JavaScript.

Ответ 7

К сожалению, поддержка даты в Java полностью ужасна. Официально вам, вероятно, придется делать это с помощью Календаря, но это, по-моему, не обязательно. Как и многие другие, время Joda намного лучше, но все еще не так просто использовать как даты в Ruby on Rails.

Я не знаю о каком-либо пакете Java, который дает вам такую ​​поддержку даты (Joda немного отстает, но приближается), но в Groovy использование TimeCategory дает вам очень рубиновую дату Rails поддержка.