我有两个日期:
Start date: "2022-03-14"
End date: "2022-04-15"
我想要结果=1(对于日期,2022-04-01(
tl;dr
LocalDate.parse( "2022-03-14" ).datesUntil( LocalDate.parse( "2022-04-15" ) ).filter( localDate -> localDate.getDayOfMonth() == 1 ).count()
请在IdeOne.com上实时查看此代码。
1
详细信息
首先,将输入解析为LocalDate
对象。
LocalDate start = LocalDate.parse( "2022-03-14" );
LocalDate end = LocalDate.parse( "2022-04-15" );
LocalDate#datesUntil
方法在两个值之间创建一个LocalDate
对象流。我们可以过滤该流,只保留月日为1(月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 );
你的问题有点模糊,但这里有一些东西可能会帮助你开始。
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";,有一个月的第一天。然而,这并不是防错的,因为";2022-05-01";以及";2022-06-01";会给出一个不准确的答案1,而实际上是2,所以请记住这一点。