Введение
Класс LocalDate
в Java8 предоставляет несколько методов для манипуляции значениями дат. Одним из таких методов является withMonth()
, который возвращает новый экземпляр LocalDate
после изменения или установки месяца в году.
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
Класс LocalDate
в Java8 предоставляет несколько методов для манипуляции значениями дат. Одним из таких методов является withMonth()
, который возвращает новый экземпляр 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()
возвращает новый экземпляр 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()
в цикле для генерации списка дат с разными значениями месяца в году. Вот пример, который генерирует даты для каждого месяца в году 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()
используется для получения значения месяца в году для даты. Вот пример, демонстрирующий, как использовать методы 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()
- это полезный инструмент для манипуляции датами и может быть использован многими разными способами, в том числе для генерации списка дат для каждого месяца в году.