Java Language
Календарь и его подклассы
Поиск…
замечания
Начиная с Java 8, Calendar
и его подклассы были заменены пакетом java.time и его подпакетами. Они должны быть предпочтительными, если для устаревшего API не требуется Календарь.
Создание объектов календаря
Объекты Calendar
могут быть созданы с помощью getInstance()
или с помощью конструктора GregorianCalendar
.
Важно отметить, что месяцы в Calendar
основаны на нулевом значении, что означает, что JANUARY представлен значением int
0. Для обеспечения лучшего кода всегда используйте константы Calendar
, такие как Calendar.JANUARY
чтобы избежать недоразумений.
Calendar calendar = Calendar.getInstance();
Calendar gregorianCalendar = new GregorianCalendar();
Calendar gregorianCalendarAtSpecificDay = new GregorianCalendar(2016, Calendar.JANUARY, 1);
Calendar gregorianCalendarAtSpecificDayAndTime = new GregorianCalendar(2016, Calendar.JANUARY, 1, 6, 55, 10);
Примечание . Всегда используйте константы месяца: числовое представление вводит в заблуждение , например Calendar.JANUARY
имеет значение 0
Увеличение / уменьшение полей календаря
add()
и roll()
могут использоваться для увеличения / уменьшения полей Calendar
.
Calendar calendar = new GregorianCalendar(2016, Calendar.MARCH, 31); // 31 March 2016
Метод add()
влияет на все поля и ведет себя эффективно, если нужно добавить или вычесть фактические даты из календаря
calendar.add(Calendar.MONTH, -6);
Вышеуказанная операция удаляет шесть месяцев из календаря, возвращая нас к 30 сентября 2015 года.
Чтобы изменить конкретное поле, не влияя на другие поля, используйте roll()
.
calendar.roll(Calendar.MONTH, -6);
Вышеупомянутая операция удаляет шесть месяцев с текущего месяца , поэтому месяц идентифицируется как сентябрь. Никакие другие поля не были скорректированы; год не изменился с этой операцией.
Поиск AM / PM
С классом Calendar легко найти AM или PM.
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
if (cal.get(Calendar.AM_PM) == Calendar.PM)
System.out.println("It is PM");
Выделение календарей
Чтобы получить разницу между двумя Calendar
, используйте getTimeInMillis()
:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.DATE, c2.get(Calendar.DATE) + 1);
System.out.println(c2.getTimeInMillis() - c1.getTimeInMillis()); //outputs 86400000 (24 * 60 * 60 * 1000)