Как получить текущую и следующую дату с помощью LocalDate в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот учебник проведет вас через получение текущей даты и вычисление следующей даты с использованием класса LocalDate в Java. API Java Time, представленный в Java 8, предоставляет всесторонние возможности для работы с датой и временем. К концу этого учебника вы поймете, как эффективно использовать LocalDate для выполнения базовых операций с датами.

Понимание Java Time API и LocalDate

Прежде чем мы начнем кодировать, давайте узнаем о классе LocalDate и о том, почему он полезен для работы с датами в Java-приложениях.

Что такое Java Time API?

Java 8 представила Java Time API в пакете java.time, чтобы решить ограничения старых классов даты и времени. Этот API предоставляет более понятный и интуитивно понятный подход к обработке даты и времени.

Введение в LocalDate

Класс LocalDate представляет дату без компонента времени (год, месяц, день). Он неизменяемый, потокобезопасный и следует календарной системе ISO-8601.

Некоторые ключевые преимущества использования LocalDate включают:

  • Обеспечивает четкое разделение между понятиями даты, времени и даты-времени
  • Предлагает интуитивно понятные методы для манипулирования датами
  • Имеет встроенную поддержку различных форматов дат
  • Правильно обрабатывает вычисления дат

Давайте создадим новый Java-файл, чтобы изучить функциональность LocalDate.

  1. В WebIDE щелкните панель Explorer (значок, похожий на страницы на левой боковой панели)
  2. Щелкните правой кнопкой мыши в панели проводника файлов и выберите "New File" (Новый файл)
  3. Назовите файл DateExample.java и нажмите "OK"
  4. Скопируйте следующий базовый шаблон кода в файл:
public class DateExample {
    public static void main(String[] args) {
        // We will add our date code here
        System.out.println("Learning about LocalDate in Java");
    }
}
  1. Сохраните файл, нажав Ctrl+S или выбрав File > Save в меню

Теперь, когда мы создали наш Java-файл, мы перейдем к добавлению кода для работы с текущей датой на следующем шаге.

Получение текущей даты с помощью LocalDate

На этом шаге мы изменим нашу Java-программу, чтобы получить и отобразить текущую дату, используя класс LocalDate.

Импорт класса LocalDate

Сначала нам нужно импортировать класс LocalDate из пакета java.time. Откройте файл DateExample.java и добавьте оператор импорта вверху:

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // We will add our date code here
        System.out.println("Learning about LocalDate in Java");
    }
}

Использование метода LocalDate.now()

Класс LocalDate предоставляет статический метод now(), который возвращает текущую дату. Давайте изменим наш код, чтобы получить и отобразить текущую дату:

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Display the current date
        System.out.println("Current date: " + currentDate);
    }
}

Компиляция и запуск программы

Теперь давайте скомпилируем и запустим нашу программу:

  1. Откройте терминал в WebIDE (Terminal > New Terminal в меню)
  2. Перейдите в каталог проекта, если необходимо:
    cd /home/labex/project
  3. Скомпилируйте Java-программу:
    javac DateExample.java
  4. Запустите скомпилированную программу:
    java DateExample

Вы должны увидеть вывод, похожий на:

Current date: 2023-04-12

Фактическая дата будет отражать текущую дату при запуске программы.

Понимание формата вывода

Представление строки по умолчанию для объекта LocalDate соответствует формату ISO-8601: YYYY-MM-DD. Это международный стандарт для представления дат.

Например, 2023-04-12 представляет собой 12 апреля 2023 года.

Вы успешно получили и отобразили текущую дату, используя класс LocalDate. На следующем шаге мы узнаем, как вычислить следующую дату.

Вычисление следующей даты

Теперь, когда мы можем получить текущую дату, мы узнаем, как вычислить следующую дату, добавляя дни к объекту LocalDate.

Понимание манипулирования датами с помощью LocalDate

Класс LocalDate предоставляет несколько методов для манипулирования датами, в том числе:

  • plusDays(long days): Добавляет указанное количество дней
  • plusWeeks(long weeks): Добавляет указанное количество недель
  • plusMonths(long months): Добавляет указанное количество месяцев
  • plusYears(long years): Добавляет указанное количество лет

Существуют также соответствующие методы minus для вычитания.

Давайте улучшим наш код, чтобы вычислить и отобразить следующую дату:

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Calculate the next date by adding one day
        LocalDate nextDate = currentDate.plusDays(1);

        // Display both dates
        System.out.println("Current date: " + currentDate);
        System.out.println("Next date: " + nextDate);
    }
}

Компиляция и запуск обновленной программы

Давайте скомпилируем и запустим нашу обновленную программу:

  1. Убедитесь, что вы сохранили изменения в DateExample.java
  2. В терминале скомпилируйте Java-программу:
    javac DateExample.java
  3. Запустите скомпилированную программу:
    java DateExample

Вы должны увидеть вывод, похожий на:

Current date: 2023-04-12
Next date: 2023-04-13

Опять же, фактические даты будут отражать текущую дату при запуске программы.

Изучение других манипуляций с датами

Давайте дополнительно улучшим нашу программу, чтобы продемонстрировать другие методы манипулирования датами:

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Calculate various future dates
        LocalDate nextDate = currentDate.plusDays(1);
        LocalDate nextWeek = currentDate.plusWeeks(1);
        LocalDate nextMonth = currentDate.plusMonths(1);
        LocalDate nextYear = currentDate.plusYears(1);

        // Display all dates
        System.out.println("Current date: " + currentDate);
        System.out.println("Next date: " + nextDate);
        System.out.println("Date after one week: " + nextWeek);
        System.out.println("Date after one month: " + nextMonth);
        System.out.println("Date after one year: " + nextYear);
    }
}

Скомпилируйте и запустите программу снова:

javac DateExample.java
java DateExample

Вывод покажет текущую дату, следующую дату и даты через неделю, месяц и год:

Current date: 2023-04-12
Next date: 2023-04-13
Date after one week: 2023-04-19
Date after one month: 2023-05-12
Date after one year: 2024-04-12

Важная концепция: Неизменяемость (Immutability)

Обратите внимание, что мы присвоили результат plusDays() новой переменной. Это связано с тем, что объекты LocalDate неизменяемы (immutable), то есть их значения не могут быть изменены после создания. Такие методы, как plusDays(), не изменяют исходный объект; вместо этого они возвращают новый объект с обновленным значением.

Эта неизменяемость является важной особенностью, которая делает объекты LocalDate потокобезопасными и более предсказуемыми в сложных приложениях.

Извлечение компонентов даты

На этом шаге мы узнаем, как извлекать отдельные компоненты из объекта LocalDate, такие как день, месяц, год и день недели.

Методы извлечения компонентов даты

Класс LocalDate предоставляет несколько методов для извлечения конкретных компонентов даты:

  • getDayOfMonth(): Возвращает день месяца (1-31)
  • getMonthValue(): Возвращает месяц в виде числа (1-12)
  • getMonth(): Возвращает месяц в виде константы enum
  • getYear(): Возвращает год
  • getDayOfWeek(): Возвращает день недели в виде константы enum

Давайте создадим новый файл, чтобы изучить эти методы:

  1. В WebIDE создайте новый файл с именем DateComponents.java
  2. Добавьте следующий код в файл:
import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DateComponents {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Extract date components
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // Display the components
        System.out.println("Current date: " + currentDate);
        System.out.println("Day of month: " + day);
        System.out.println("Month (number): " + monthValue);
        System.out.println("Month (name): " + month);
        System.out.println("Year: " + year);
        System.out.println("Day of week: " + dayOfWeek);
    }
}
  1. Сохраните файл, нажав Ctrl+S

Компиляция и запуск программы

Теперь давайте скомпилируем и запустим нашу новую программу:

  1. В терминале скомпилируйте Java-программу:
    javac DateComponents.java
  2. Запустите скомпилированную программу:
    java DateComponents

Вы должны увидеть вывод, похожий на:

Current date: 2023-04-12
Day of month: 12
Month (number): 4
Month (name): APRIL
Year: 2023
Day of week: WEDNESDAY

Создание конкретной даты

В дополнение к получению текущей даты, мы можем создать объект LocalDate, представляющий конкретную дату, используя метод of(). Давайте улучшим нашу программу, чтобы создать конкретную дату:

import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DateComponents {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Create a specific date
        LocalDate specificDate = LocalDate.of(2025, 12, 25);

        // Extract date components from the current date
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // Display the current date components
        System.out.println("Current date: " + currentDate);
        System.out.println("Day of month: " + day);
        System.out.println("Month (number): " + monthValue);
        System.out.println("Month (name): " + month);
        System.out.println("Year: " + year);
        System.out.println("Day of week: " + dayOfWeek);

        // Display the specific date
        System.out.println("\nSpecific date: " + specificDate);
        System.out.println("Day of week for specific date: " + specificDate.getDayOfWeek());
    }
}

Скомпилируйте и запустите обновленную программу:

javac DateComponents.java
java DateComponents

Вывод теперь будет включать информацию о конкретной дате:

Current date: 2023-04-12
Day of month: 12
Month (number): 4
Month (name): APRIL
Year: 2023
Day of week: WEDNESDAY

Specific date: 2025-12-25
Day of week for specific date: THURSDAY

Теперь вы узнали, как извлекать компоненты из объекта LocalDate и создавать даты для конкретных дней. Эти возможности особенно полезны при создании приложений, которым необходимо выполнять операции, основанные на дате, или отображать информацию о дате в разных форматах.

Резюме

В этом руководстве вы узнали, как работать с датами в Java, используя класс LocalDate из Java Time API. Вот краткое изложение того, что вы сделали:

  1. Создали Java-программу для получения текущей даты с помощью LocalDate.now()
  2. Вычислили будущие даты, добавляя дни, недели, месяцы и годы к дате
  3. Извлекли компоненты из даты, такие как день, месяц, год и день недели
  4. Создали конкретную дату, используя метод LocalDate.of()

Эти базовые операции с датами составляют основу для более сложных функций, основанных на датах, в Java-приложениях. Java Time API предоставляет всеобъемлющий набор классов и методов для работы с датами и временем, упрощая обработку требований, связанных с датами, в ваших приложениях.

Некоторые распространенные применения полученных вами знаний включают:

  • Расчет сроков выполнения задач или платежей
  • Планирование событий и встреч
  • Определение дня недели для конкретной даты
  • Отслеживание периодов времени между событиями
  • Форматирование дат для отображения в пользовательских интерфейсах

Продолжая свой путь в Java, вы можете изучить более продвинутые функции Java Time API, такие как работа с часовыми поясами, форматирование дат для разных регионов и выполнение сложных вычислений дат.