Метод withMonth класса LocalDate в Java

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

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

Введение

Класс LocalDate в Java8 предоставляет несколько методов для манипуляции значениями дат. Одним из таких методов является withMonth(), который возвращает новый экземпляр LocalDate после изменения или установки месяца в году.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("Date") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/for_loop -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} java/output -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} java/classes_objects -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} java/packages_api -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} java/date -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} java/exceptions -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} java/object_methods -.-> lab-117862{{"Метод withMonth класса LocalDate в Java"}} end

Создание экземпляра LocalDate

Первым шагом является создание экземпляра LocalDate в Java. Класс LocalDate находится в пакете java.time, поэтому мы будем включать этот пакет в начале нашего файла кода. Класс LocalDate предоставляет метод of(), который может создать новый экземпляр LocalDate.

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // создание нового экземпляра LocalDate
        LocalDate date = LocalDate.of(2022, 10, 12);

        // вывод исходной даты
        System.out.println("Original Date: " + date);
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

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

Метод withMonth() возвращает новый экземпляр LocalDate с месяцем в году, установленным в значение, переданное в качестве аргумента.

Мы можем установить другой месяц в году с использованием метода withMonth() и получить новую созданную дату. Здесь мы устанавливаем месяц в году равным 4 и получаем новую дату.

// setting the month-of-year to 4 and getting the new date
LocalDate newDate = date.withMonth(4);

// printing the new date
System.out.println("New Date: " + newDate);

Вот полный код:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creating a new LocalDate instance
        LocalDate date = LocalDate.of(2022, 10, 12);

        // printing the original date
        System.out.println("Original Date: " + date);

        // setting the month-of-year to 4 and getting the new date
        LocalDate newDate = date.withMonth(4);

        // printing the new date
        System.out.println("New Date: " + newDate);
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Вы должны увидеть следующий вывод:

Original Date: 2022-10-12
New Date: 2022-04-12

Обработка недействительных значений месяца

Если значение месяца, переданное в метод withMonth(), является недействительным, то есть находится вне диапазона [1, 12], метод выбросит исключение DateTimeException.

Вот пример, демонстрирующий, как можно обработать недействительное значение месяца.

import java.time.DateTimeException;
import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // создание нового экземпляра LocalDate
        LocalDate date = LocalDate.of(2022, 10, 12);

        // вывод исходной даты
        System.out.println("Original Date: " + date);

        try {
            // попытка установить недействительное значение месяца (13)
            LocalDate newDate = date.withMonth(13);

            // вывод новой даты
            System.out.println("New Date: " + newDate);
        } catch(DateTimeException ex) {
            System.out.println("Invalid month value provided: " + ex.getMessage());
        }
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Вы должны увидеть следующий вывод:

Original Date: 2022-10-12
Invalid month value provided: Invalid value for MonthOfYear (valid values 1 - 12): 13

Изменение месяца в исходном экземпляре даты

Метод withMonth() возвращает новый экземпляр LocalDate с установленным значением месяца в новое значение, и он не изменяет исходный экземпляр даты. Если вы хотите изменить значение месяца в исходной дате, вам нужно присвоить значение, возвращаемое методом withMonth(), обратно исходному экземпляру даты, вот так:

// changing the month-of-year in the original date instance
date = date.withMonth(11);

// printing the updated date
System.out.println("Updated Date: " + date);

Вот полный код:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creating a new LocalDate instance
        LocalDate date = LocalDate.of(2022, 10, 12);

        // printing the original date
        System.out.println("Original Date: " + date);

        // setting the month-of-year to 5 and getting the new date
        LocalDate newDate = date.withMonth(5);

        // printing the new date
        System.out.println("New Date: " + newDate);

        // changing the month-of-year in the original date instance
        date = date.withMonth(11);

        // printing the updated date
        System.out.println("Updated Date: " + date);
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Вы должны увидеть следующий вывод:

Original Date: 2022-10-12
New Date: 2022-05-12
Updated Date: 2022-11-12

Обработка недействительного значения дня

Если день месяца является недействительным для года при изменении месяца, он будет изменен на последний допустимый день нового месяца. Например, если мы меняем месяц года с февраля на апрель в високосном году, значение дня будет автоматически скорректировано на последний допустимый день апреля.

// creating a new LocalDate instance
LocalDate date = LocalDate.of(2024, 2, 29);

// printing the original date
System.out.println("Original Date: " + date);

// setting the month-of-year to April
LocalDate newDate = date.withMonth(4);

// printing the new date
System.out.println("New Date: " + newDate);

Вот полный код:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creating a new LocalDate instance
        LocalDate date = LocalDate.of(2024, 2, 29);

        // printing the original date
        System.out.println("Original Date: " + date);

        // setting the month-of-year to April
        LocalDate newDate = date.withMonth(4);

        // printing the new date
        System.out.println("New Date: " + newDate);
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Вы должны увидеть следующий вывод:

Original Date: 2024-02-29
New Date: 2024-04-30

Использование метода withMonth() в цикле

Мы можем использовать метод withMonth() в цикле для генерации списка дат с разными значениями месяца в году. Вот пример, который генерирует даты для каждого месяца в году 2022:

// generating dates for each month of the year 2022
for (int month = 1; month <= 12; month++) {
    LocalDate date = LocalDate.of(2022, month, 1);
    System.out.println("Date for " + date.getMonth() + ": " + date);
}

Вот полный код:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // generating dates for each month of the year 2022
        for (int month = 1; month <= 12; month++) {
            LocalDate date = LocalDate.of(2022, month, 1);
            System.out.println("Date for " + date.getMonth() + ": " + date);
        }
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Вы должны увидеть следующий вывод:

Date for JANUARY: 2022-01-01
Date for FEBRUARY: 2022-02-01
Date for MARCH: 2022-03-01
Date for APRIL: 2022-04-01
Date for MAY: 2022-05-01
Date for JUNE: 2022-06-01
Date for JULY: 2022-07-01
Date for AUGUST: 2022-08-01
Date for SEPTEMBER: 2022-09-01
Date for OCTOBER: 2022-10-01
Date for NOVEMBER: 2022-11-01
Date for DECEMBER: 2022-12-01

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

Метод getMonthValue() используется для получения значения месяца в году для даты. Вот пример, демонстрирующий, как использовать методы withMonth() и getMonthValue() для изменения и получения значения месяца в году для даты:

// creating a new LocalDate instance
LocalDate date = LocalDate.of(2022, 11, 15);

// printing the original date
System.out.println("Original Date: " + date);

// getting the month-of-year value
int originalMonthValue = date.getMonthValue();

// changing the month-of-year to 10
date = date.withMonth(10);

// getting the new month-of-year value
int newMonthValue = date.getMonthValue();

// printing the updated date and month values
System.out.println("Updated Date: " + date);
System.out.println("Original Month Value: " + originalMonthValue);
System.out.println("New Month Value: " + newMonthValue);

Вот полный код:

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // creating a new LocalDate instance
        LocalDate date = LocalDate.of(2022, 11, 15);

        // printing the original date
        System.out.println("Original Date: " + date);

        // getting the month-of-year value
        int originalMonthValue = date.getMonthValue();

        // changing the month-of-year to 10
        date = date.withMonth(10);

        // getting the new month-of-year value
        int newMonthValue = date.getMonthValue();

        // printing the updated date and month values
        System.out.println("Updated Date: " + date);
        System.out.println("Original Month Value: " + originalMonthValue);
        System.out.println("New Month Value: " + newMonthValue);
    }
}

Используйте следующую команду для компиляции и запуска кода в терминале:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

Вы должны увидеть следующий вывод:

Original Date: 2022-11-15
Updated Date: 2022-10-15
Original Month Value: 11
New Month Value: 10

Резюме

В этом практическом занятии вы узнали, как использовать метод withMonth() для создания копии экземпляра LocalDate с установленным новым значением месяца в году. Также вы узнали, как обрабатывать недействительные значения месяцев и как использовать метод getMonthValue() для получения значения месяца в году для экземпляра LocalDate. Метод withMonth() - это полезный инструмент для манипуляции датами и может быть использован многими разными способами, в том числе для генерации списка дат для каждого месяца в году.