繁体   English   中英

java.time - 是否有函数可以在两天之间查找特定日期(星期几或月份的某天)的数量?

[英]java.time - Is there a function to find number of a specific day (day of week, or day of month) between two days?

那么是否有一个函数或某些东西可以提供两个日期和一周中的某一天(例如星期六)并返回两个日期之间的星期六数?

尝试使用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和分析器进行经验测试,看看您的担忧是否有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM