java - 迭代工作日的子范围

标签 java dayofweek weekday

我正在尝试迭代一系列工作日,其中每个工作日映射到一个整数(星期日 = 1,星期一 = 2,...,星期六 = 7)

范围由开始和结束日期定义。这对于像星期一(2) - 星期四(5)这样的开始和结束日来说很好,我可以这样做:

for(int i = startDay; i <= endDay; i++) { ... } 

当范围分为一周的结束和开始时(例如星期五(6) - 星期一(2)),我遇到了困难。这显然不适用于上面的 for 循环 - 例如

for(int i = 6; i <= 2; i++) { ... }    // wouldn't even execute once. 

我能看到的唯一解决方案是实现某种循环缓冲区,我觉得这对于这样一个简单的问题来说有点过分了。我只是被难住了,很可能在这里遗漏了一些明显的东西。我认为解决方案可能与模运算有关,但我不太确定。

最佳答案

你可以这样做:

int numberOfDays = endDay >= startDay ? endDay - startDay : 8 - (startDay - endDay);
for (int i = startDay; i <= startDay + numberOfDays; i++) {
    int day = (i - 1) % 7 + 1;
}

这利用 % 模运算符来确保所有值保持在 1 - 7 范围内。

例如,一旦 i 变为 8,计算会将 day 换回 1:(8 - 1) % 7 + 1 == 1

关于java - 迭代工作日的子范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137404/

相关文章:

postgresql - 在 Postgresql 中获取两个日期之间的工作日

java - 尝试连接到串行端口时使用 javax.swing.SwingWorker 时出现问题

java - 如何模拟已注入(inject)依赖项的父类(super class)

Java - 计算除节假日(周六和周日)之外的天数

jquery - 使用 jQuery 循环在 html 表中显示工作日

mysql - 如何使用MySQL获取最后一个星期日和最后一个星期日之前的星期日?

java - 在循环java中的多列中写入CSV

java - SpringMVC : How to mark two inputs invalid?

r - 如何在给定的任意年份中获得去年的相同工作日?

javascript - 当日期处于不同月份时,如何获取本周的第一天和最后一天?