Что я могу использовать, чтобы заменить это, new Date(2009, 12, 9)
?
Спасибо за вашу помощь.
Что я могу использовать, чтобы заменить это, new Date(2009, 12, 9)
?
Спасибо за вашу помощь.
В идеале используйте Joda Time. Это бесконечно превосходный API для встроенного. Затем вы захотите выбрать LocalDateTime
и DateTime
в зависимости от ваших точных требований (это сложная область - я не собираюсь подводить итоги в предложение или два, но docs выполняйте хорошую работу).
Если это абсолютно необходимо, используйте java.util.Calendar и преобразуйте его в Date
, когда вам нужно.
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();
Если вы посмотрите на 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();
Вы также можете использовать объект 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 );
}
}
Тим, в ваших комментариях вы упомянули, что делаете это в контексте GXT, то есть в коде клиента GWT. GWT не поддерживает GregorianCalendar, и вы, скорее всего, не сможете поставить JodaTime через GWTCompiler (вы можете быть в состоянии, но действительно хотите).
Я думаю, что вы действительно хотите использовать JNSI, если хотите выполнять календарные операции в GWT. См. Класс Date в JavaScript.
GregorianCalendar(year + 1900, month, date)
К сожалению, поддержка даты в Java полностью ужасна. Официально вам, вероятно, придется делать это с помощью Календаря, но это, по-моему, не обязательно. Как и многие другие, время Joda намного лучше, но все еще не так просто использовать как даты в Ruby on Rails.
Я не знаю о каком-либо пакете Java, который дает вам такую поддержку даты (Joda немного отстает, но приближается), но в Groovy использование TimeCategory дает вам очень рубиновую дату Rails поддержка.