📜  Java中的 YearMonth range() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:31:56.320000             🧑  作者: Mango

Java中的 YearMonth range() 方法及示例

在 Java 的 java.time 包中的 YearMonth 类提供了 range() 方法,可以获取到一个 YearMonth 对象所包含的年份和月份的范围,即该年份的第一天和最后一天日期。该方法返回 TemporalAmount 对象,需要使用 LocalDate 对象的 plus()minus() 方法来计算具体的日期。

用法
public TemporalAmount range(TemporalField field)

该方法接收一个参数 field,表示要获取的范围。field 参数可以是 ChronoField.YEARChronoField.MONTH_OF_YEAR,分别表示获取年份和月份的范围。

示例

以下是一个示例程序,演示如何使用 YearMonthrange() 方法来获取某一年份或月份的第一天和最后一天的日期:

import java.time.LocalDate;
import java.time.YearMonth;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAmount;

public class YearMonthRangeExample {
    public static void main(String[] args) {
        YearMonth yearMonth = YearMonth.of(2022, 2);

        // 获取该年份的第一天和最后一天
        TemporalAmount yearRange = yearMonth.range(ChronoField.YEAR);
        LocalDate yearFirstDay = LocalDate.of((int) yearRange.get(ChronoField.YEAR), 1, 1);
        LocalDate yearLastDay = LocalDate.of((int) yearRange.get(ChronoField.YEAR), 12, 31);
        System.out.println("Year " + yearRange.get(ChronoField.YEAR) + " first day: " + yearFirstDay);
        System.out.println("Year " + yearRange.get(ChronoField.YEAR) + " last day: " + yearLastDay);

        // 获取该月份的第一天和最后一天
        TemporalAmount monthRange = yearMonth.range(ChronoField.MONTH_OF_YEAR);
        LocalDate monthFirstDay = LocalDate.of(yearMonth.getYear(), yearMonth.getMonthValue(), 1);
        LocalDate monthLastDay = monthFirstDay.plus(monthRange).minus(1);
        System.out.println("Month " + yearMonth.getMonthValue() + " first day: " + monthFirstDay);
        System.out.println("Month " + yearMonth.getMonthValue() + " last day: " + monthLastDay);
    }
}

输出结果:

Year 2022 first day: 2022-01-01
Year 2022 last day: 2022-12-31
Month 2 first day: 2022-02-01
Month 2 last day: 2022-02-28

上述示例中,我们通过 YearMonthof() 方法创建了一个表示 20222 月的 YearMonth 对象。然后分别调用了 range() 方法来获取该年份和月份的范围,并通过 LocalDate 的相应方法计算了该年份和月份的第一天和最后一天的日期。

需要注意的是,获取月份范围后,我们使用了 LocalDate 对象的 plus()minus() 方法来计算月份的最后一天。由于 YearMonth.range(ChronoField.MONTH_OF_YEAR) 方法返回的是月份的天数,所以我们需要将该值加上月份的第一天再减去 1,才能得到月份的最后一天。

总结

YearMonthrange() 方法可以方便地获取某一年份或月份的范围,即该年份的第一天和最后一天日期。通过该方法,可以方便地计算该年份或月份的各种日期。