java.time - 是否有一个函数可以查找两天之间特定日期(一周中的某一天或一个月中的某一天)的数字?

标签 java java-time

那么是否有一个函数或其他东西,您可以给出两个日期和一周中的一天(例如星期六),并且它会返回两个日期之间星期六的数量?

尝试使用 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/

相关文章:

java - 将 org.joda.time 转换为 java.time

java - SimpleDateFormat 与带有时区的 ZonedDateTime

Java 计算多个变量中最少的数

java - Apache Pivot,从 Apache 孵化器到 Main,反馈?

Java 9 错误 : not in a module on the module source path

java - Duration#toDays 和 Duration#toDaysPart 是多余的吗?

java - Spring外部库bean初始化顺序

java - Pyspark - java.lang.OutOfMemoryError : when running as standalone application but NO error when running as docker

无法在索引 0 处解析 java.time.format.DateTimeParseException

java - JSR-310 - 解析可变长度的秒分数