为什么calendar.add(Calendar.DAY_OF_WEEK, -5)不一定是周三calendar.add(Calendar.DAY_OF_WEEK, -6)一定是周二呢
时间: 2024-12-14 18:19:51 浏览: 9
`calendar.add(Calendar.DAY_OF_WEEK, -n)` 方法会改变当前日期到最近的同一天(比如工作日),但不是简单地向前或向后跳过 n 天。当 `n` 是正数时,它会尝试增加星期几的数量,如果超过了该月的日数,就会从下一个月开始计算。因此,如果你调用 `calendar.add(Calendar.DAY_OF_WEEK, -5)`,这可能不会总是返回周三,因为如果今天已经是周二并且往前推五天,结果可能是周一。
同样地,`-6` 表示往前推六天,如果是周五,那么 `+(-6)` 实际上是回到周四;如果在周四之后,则会是周三(除非是最后一天)。所以 `-6` 不一定就是周二,而是最近的一个周二。
要确保得到特定的星期几,可以先设置目标星期几,再调整日期:
```java
// 设置期望的星期三
calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
// 如果需要减去几天以到达特定的星期三
calendar.add(Calendar.DAY_OF_WEEK, -5);
System.out.println(calendar.getTime());
```
相关问题
calendar.add(Calendar.MONDAY, -5)为什么到不了上周的周三呢?举例说明
`calendar.add(Calendar.DAY_OF_WEEK, -5)` 是试图通过向当前的星期偏移五个工作日(不包括当天)来达到上一周的周三。然而,这个计算可能不会按照预期到达上周的周三,因为`Calendar.DAY_OF_WEEK`是从0开始计数的,其中0代表周日,1代表周一,依此类推。
以假设今天是周一为例(也就是`Calendar.DAY_OF_WEEK`为1),当你调用 `calendar.add(Calendar.DAY_OF_WEEK, -5)`,会从1(周一)减去5,得到-4。由于日历中没有负数的日子,这实际上会使你跳过了一整个星期,到了下一周的周四(因为周四是-3,周五是-2,周六是-1)。所以,正确的做法应该是:
```java
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_WEEK, -Calendar.MONDAY); // 或者 calendar.add(Calendar.DAY_OF_WEEK, -1); 直接跳回上周
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("Last Wednesday: " + dayOfWeek); // 如果今天是周一,输出将会是2,表示上周三
```
这样,你会到达上周的周三,因为-1代表的是前一天,即周日,再加一天就是周一,以此类推。
java判断今天是不是周三,如果是的话获取上周三和这周二的值,日期格式为yyyy-MM-dd
以下是 Java 代码实现:
```java
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 获取当前日期
Calendar calendar = Calendar.getInstance();
Date today = calendar.getTime();
// 判断是否是周三
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.WEDNESDAY) {
// 获取上周三
calendar.add(Calendar.DATE, -7);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastWednesday = sdf.format(calendar.getTime());
System.out.println("上周三:" + lastWednesday);
// 获取本周二
calendar.add(Calendar.DATE, 5);
String thisTuesday = sdf.format(calendar.getTime());
System.out.println("本周二:" + thisTuesday);
} else {
System.out.println("今天不是周三");
}
}
}
```
输出结果:
```
上周三:2021-09-22
本周二:2021-09-28
```
阅读全文