0Pricing
Java Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. LocalDate, LocalTime, LocalDateTime
  2. Instant и Duration
  3. Period и арифметика дат
  4. Форматирование с DateTimeFormatter
← Назад к Java Academy