那么是否有一个函数或其他东西,您可以给出两个日期和一周中的一天(例如星期六),并且它会返回两个日期之间星期六的数量?
尝试使用 ChronoUnit.WEEKS. Between
并将结果除以 7 的问题是,如果您有类似 4 的内容,它将无法工作 天(因为这不是一整周),或10 天(因为它会被算作一周)。
另一个想法可能是使用循环并检查一天是否是星期六,但这种方式对于大时间范围来说效率低下且缓慢。
是否有一个类似的函数,但它不是计算一周中的某一天,而是计算一个月中某一天(例如任何一个月的 15 日) 或一年中某一天(例如,每年的 4 月 4 日)。
如果没有这样的功能,什么是有效的方法来做到这一点?
最佳答案
正如其他人评论的那样,您需要编写自己的代码。但是 java.time 和 Java Streams 可以帮助您完成大部分工作。
LocalDate::datesUntil
方法生成 LocalDate
对象流。测试每个的 DayOfWeek
。收集命中。
类似于这个未经测试的示例代码。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate start = LocalDate.now( z ) ;
LocalDate then = today.plusDays( 177 ) ;
Stream < LocalDate > dates = start.datesUntil( then ) ;
List < LocalDate > saturdays =
dates
.filter(
date ->
date
.getDayOfWeek()
.equals( DayOfWeek.SATURDAY )
)
.collect(
Collectors.toList()
)
;
您表达了对效率的担忧。我怀疑你陷入了过早优化的陷阱。您的应用程序真的全天每分钟执行数千次此操作吗?如果没有,性能可能不是问题。
始终首先编写简单直接的代码。然后使用 Microbenchmarks Suite 进行实证测试并使用分析器来查看您的担忧是否有效。
关于java.time - 是否有一个函数可以查找两天之间特定日期(一周中的某一天或一个月中的某一天)的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478119/