Period и арифметика дат
Складывайте и вычитайте даты
«Period и арифметика дат» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Величины на основе дат
Если Duration измеряет время в часах и секундах, то Period измеряет величины в годах, месяцах и днях. Это подходящий инструмент для календарных вычислений, например при определении возраста и сроков.
Добавление дней
LocalDate предоставляет метод plusDays для перемещения вперёд. Помните, что результатом будет новое неизменяемое значение.
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2026, 5, 30);
System.out.println(start.plusDays(10));
}
}Добавление месяцев и лет
plusMonths и plusYears смещают дату на более крупные единицы времени и корректно учитывают продолжительность месяцев.
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2026, 1, 31);
System.out.println(start.plusMonths(1));
System.out.println(start.plusYears(2));
}
}Вычитание дат
Используйте minusDays, minusWeeks и похожие методы, чтобы перемещаться назад во времени.
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2026, 5, 30);
System.out.println(date.minusWeeks(2));
}
}Создание Period
Создайте Period с помощью of или фабричных методов для одной единицы, таких как ofMonths, а затем добавьте его к дате.
import java.time.LocalDate;
import java.time.Period;
public class Main {
public static void main(String[] args) {
Period p = Period.of(1, 2, 3);
LocalDate date = LocalDate.of(2026, 1, 1);
System.out.println(date.plus(p));
}
}Промежуток между датами
Period.between измеряет промежуток между двумя датами в годах, месяцах и днях.
import java.time.LocalDate;
import java.time.Period;
public class Main {
public static void main(String[] args) {
LocalDate from = LocalDate.of(2020, 1, 15);
LocalDate to = LocalDate.of(2026, 5, 30);
Period p = Period.between(from, to);
System.out.println(p.getYears() + "y " + p.getMonths() + "m " + p.getDays() + "d");
}
}Вычисление возраста
Классический пример использования Period.between — вычисление возраста человека в полных годах.
import java.time.LocalDate;
import java.time.Period;
public class Main {
public static void main(String[] args) {
LocalDate birth = LocalDate.of(2000, 6, 15);
LocalDate today = LocalDate.of(2026, 5, 30);
int age = Period.between(birth, today).getYears();
System.out.println(age);
}
}Подсчёт общего числа дней
Period разделяет промежуток на годы, месяцы и дни. Если Вам нужно одно общее количество дней, используйте вместо него ChronoUnit.DAYS.between.
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
LocalDate from = LocalDate.of(2026, 1, 1);
LocalDate to = LocalDate.of(2026, 12, 31);
long days = ChronoUnit.DAYS.between(from, to);
System.out.println(days);
}
}Гибкость ChronoUnit
ChronoUnit умеет считать во множестве единиц: DAYS, WEEKS, MONTHS и YEARS. Каждый вызов between возвращает одно число.
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
LocalDate from = LocalDate.of(2026, 1, 1);
LocalDate to = LocalDate.of(2026, 12, 31);
System.out.println(ChronoUnit.WEEKS.between(from, to));
System.out.println(ChronoUnit.MONTHS.between(from, to));
}
}Поиск следующего дня недели
Класс TemporalAdjusters предоставляет интеллектуальные корректировки, например переход к первому дню следующего месяца.
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2026, 5, 30);
System.out.println(date.with(TemporalAdjusters.firstDayOfNextMonth()));
}
}Period и ChronoUnit
Используйте Period, если Вам нужно представить промежуток в привычном для человека виде: в годах, месяцах и днях. Используйте ChronoUnit.between, если Вам нужно одно общее значение в одной единице измерения.
Быстрая проверка
Проверьте свои навыки календарных вычислений.
Итоги
Вы изучили календарные вычисления:
plusDays,plusMonthsиplusYearsнеизменяемым образом смещают датыPeriodизмеряет годы, месяцы и дни и особенно удобен для вычисления возрастаPeriod.betweenпредставляет промежуток в привычном для человека видеChronoUnit.betweenвозвращает одно общее значение в выбранной единицеTemporalAdjustersвыполняет интеллектуальные переходы, например к первому дню следующего месяца
Часто задаваемые вопросы
Урок «Period и арифметика дат» бесплатный?
Да — полный текст урока «Period и арифметика дат» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Period и арифметика дат»?
Складывайте и вычитайте даты Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Period и арифметика дат»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- LocalDate, LocalTime, LocalDateTime
- Instant и Duration
- Period и арифметика дат
- Форматирование с DateTimeFormatter