Java 8 计算两个日期之间的第一个月份

Java 8 calculate how many 1st of the months between two dates

我有两个约会对象:

Start date: "2022-03-14"
End date: "2022-04-15"

我想要结果 = 1(日期为 2022-04-01)

你的问题有点含糊,但这里有一些东西可能会帮助你开始。

LocalDate startDate = LocalDate.parse("2022-12-14");
LocalDate endDate = LocalDate.parse("2023-02-15");

long months = ChronoUnit.MONTHS.between(startDate, endDate);
System.out.println("There are " + months + " between the dates.");

这会找出两个日期之间的月数。例如,“2022-03-14”和“2022-04-15”之间,有一个月的1号。但是,这不是防错的,因为“2022-05-01”和“2022-06-01”会提供不准确的答案 1,而实际上是 2,所以请记住这一点。

tl;博士

LocalDate.parse( "2022-03-14" ).datesUntil( LocalDate.parse( "2022-04-15" ) ).filter( localDate -> localDate.getDayOfMonth() == 1 ).count()

看到这个code run live at IdeOne.com

1

详情

首先,将输入解析为 LocalDate 个对象。

LocalDate start = LocalDate.parse( "2022-03-14" );
LocalDate end = LocalDate.parse( "2022-04-15" );

LocalDate#datesUntil 方法在两个值之间创建一个 LocalDate 对象流。我们可以过滤该流以仅保留 day-of-month 为 1(一个月的第一天)的流。然后我们要求计算这些过滤对象的数量。

long countFirstOfMonths =
        start
                .datesUntil( end )
                .filter( localDate -> localDate.getDayOfMonth() == 1 )
                .count();

举报。

String message = String.format( "From %s to %s contains %d first-of-month dates." , start.toString() , end.toString() , countFirstOfMonths );
System.out.println( message );