日历 API 让我感到困惑。我想做的事情看起来很简单,但似乎并不真正适合我。
我想将一周的第一天设置为星期一,而不是默认的星期日(我知道它因区域设置而异,但我想始终强制执行星期一)。最重要的是,对于给定的日期,我想检索它代表的星期几(例如,1 表示星期一,7 表示星期日)。
有什么方法可以使用默认的日历 API 来执行此操作吗?我尝试过类似的方法:
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(<some Date object that's a monday>);
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
它给了我一个 2,而不是 1。我怀疑这是因为它给了我 Calendar.MONDAY
的值,但我不完全确定。基于这种怀疑,以下方法确实有效:
Calendar cal = Calendar.getInstance();
cal.setTime(<some Date object that's a monday>);
System.out.println(
(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) ?
7 : cal.get(Calendar.DAY_OF_WEEK) - 1);
...但我不想有那个 if 语句。有没有办法使用直接的 Calendar API 来完成我想要的事情?
最佳答案
查看日历源,setFirstDayOfWeek 似乎实际上只影响 WEEK_OF_MONTH 和 WEEK_OF_YEAR 计算。无论一周从哪一天开始,MONDAY 仍然是 MONDAY,并且在日历中 MONDAY 的值为 2。
关于java - 当一周从星期一开始时,如何获取给定日期的星期几?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666086/