java - 当一周从星期一开始时,如何获取给定日期的星期几?

标签 java

日历 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/

相关文章:

java - 我需要在 2D Java 模拟游戏中使用 OpenGL 吗?

Java 运算符证明包含在数组中

java - 为什么 HashMap 在指定精确容量时再次调整大小()?

java - 用于操作状态的 Spring Webflow 异常处理程序

java - 将多个@Service 和@Repository 类分组到包装器中是一种反模式吗?

java - 我正在向服务器发送 GET 方法,但接收 POST 方法

java - Spring webflow 遇到问题

java - 我做错了什么,如何添加插页式广告

用于将分隔符替换为 : or $ 的 Java 正则表达式

java - 我用 Swing 绘制的旋钮很难看。为什么?