Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java time-是否有一个函数可以查找两天之间的特定天数(星期几或月几)?_Java_Java Time - Fatal编程技术网

Java time-是否有一个函数可以查找两天之间的特定天数(星期几或月几)?

Java time-是否有一个函数可以查找两天之间的特定天数(星期几或月几)?,java,java-time,Java,Java Time,那么有没有一个函数或者什么东西,你给它两个日期和一周中的一天,比如星期六,它会返回两个日期之间的星期六数 尝试使用ChronoUnit.WEEKS.betweeks并将结果除以7的问题是,如果您有4天的时间,因为这不是一个完整的星期,或者有10天的时间,因为这将被计算为一周,那么它将不起作用 另一个想法可能是使用循环并检查一天是否是星期六,但这种方法对于大时间范围来说效率低且速度慢 类似的函数是什么,但不是一周中的某一天,它统计某个月的某一天(如15日)或某一年的某一天(如4月4日) 如果没有这

那么有没有一个函数或者什么东西,你给它两个日期和一周中的一天,比如星期六,它会返回两个日期之间的星期六数

尝试使用ChronoUnit.WEEKS.betweeks并将结果除以7的问题是,如果您有4天的时间,因为这不是一个完整的星期,或者有10天的时间,因为这将被计算为一周,那么它将不起作用

另一个想法可能是使用循环并检查一天是否是星期六,但这种方法对于大时间范围来说效率低且速度慢

类似的函数是什么,但不是一周中的某一天,它统计某个月的某一天(如15日)或某一年的某一天(如4月4日)


如果没有这样的函数,有什么有效的方法可以做到这一点呢?

正如其他人评论的那样,您需要编写自己的代码。但是java.time和java流在大部分方面都可以帮助您

LocalDate::datesUntil方法生成LocalDate对象流。测试每一个的星期几。收集点击量

类似于此未经测试的示例代码

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()
        )
; 
你表达了对效率的担忧。我怀疑您正落入过早优化的陷阱。你的应用程序真的每天每分钟执行数千次此操作吗?如果不是,性能可能不是问题


始终先编写简单的代码。然后使用和分析器进行经验测试,看看您的担忧是否有效

取两个日期的差值除以7,四舍五入?这会给出预期的答案吗?对于几个月来说,这将更加棘手,因为几个月的长度并不相等。在这种情况下,迭代所有日期并检查是否匹配给定谓词(例如,是否为星期六)可能是最简单的方法。另一种方法可能是使用循环并检查一天是否为星期六,但这种方法对于大时间范围来说效率低且速度慢–您期望的时间范围有多大?我认为from.datesUntilthen.filterdate->date.getDayOfWeek==SATURDAY.count可以在人类合理的时间跨度内正常工作。它不太可能有一个函数使这样一个非常特定于项目的特性成为API。例如,是否有一个函数返回一个满月有多少个星期二。不,但是你可以写一个。您必须根据前两条注释中提到的更原始的函数创建一个算法。@knittl除以7可以工作几天,我已经使用过了,但由于闰日的原因,同样的想法在几个月或几年内都不能工作。在我的计算机上,使用我注释中的代码,计算一百万年中星期六的数量只用了大约9秒。这是Gradle的一个冷启动。我正在使用android的ThreeTenABP java.time back port,看起来datesUnil方法是在java 9中添加的,ThreeTenBP中不可用。@Azzam明智的做法是将您的问题标记为和/@AzzamAlsharafi,用while循环替换流,每次通过调用plusDays递增LocalDate。将每个点击添加到列表中。