如何获得星期一星期开始时给定日期的星期几?

时间:2013-03-27 18:01:16

标签: java

Calendar API令我困惑。我试图做的事情似乎很简单,但似乎并不适合我。

我想将星期的第一天设置为星期一,而不是默认的星期日(我知道它与Locale不同,但我希望始终强制执行星期一)。最重要的是,对于给定的日期,我想要检索它所代表的星期几(例如,1表示星期一,7表示星期日)。

有没有办法使用默认的Calendar 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做我想做的事情?

2 个答案:

答案 0 :(得分:2)

查看日历源,看起来setFirstDayOfWeek实际上只影响WEEK_OF_MONTH和WEEK_OF_YEAR计算。无论你的星期开始的是哪一天,星期一仍然是星期一,而星期一星期一的值是2。

答案 1 :(得分:0)

  

块引用

一周的第一天来自当前的区域设置。如果您未设置日历的语言环境(Calendar.getInstance(Locale)或新的GregorianCalendar(Locale)),它将使用系统的默认设置。系统的默认值可以被JVM参数覆盖:

public static void main(String [] args){     日历c = new GregorianCalendar();     System.out.println(Locale.getDefault()+“:”+ c.getFirstDayOfWeek()); }

这应显示具有不同语言/国家/地区的JVM参数的不同输出:

-Duser.language=en -Duser.country=US -> en_US: 1 (Sunday)
-Duser.language=en -Duser.country=GB -> en_GB: 2 (Monday)

不要忘记这可能会改变其他行为(你)。

  

块引用

详情可在以下链接

找到

How to specify firstDayOfWeek for java.util.Calendar using a JVM argument