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

问题描述:

日历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来完成我想要的功能?

看看日历源,看起来setFirstDayOfWeek实际上只会影响WEEK_OF_MONTH和WEEK_OF_YEAR的计算。不管什么你一天的一周开始于周一仍然是星期一,在日历周一一直2.

+0

OK可以找到,所以我还要做什么,我做了上述其中工程。至少它会始终如一,不管区域设置如何,因为Calendar.MONDAY总是2. – Depressio 2013-03-27 18:15:48

块引用

一周的第一天值从当前的区域设置的。如果您未设置日历的语言环境(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) 

不要忘了,这可能会改变其他behavio(U)R过。

块引用

详细信息可以在下面的链接

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

+0

看起来'Calendar.firstDayOfWeek'与根问题并不真正相关。我认为这可能是,但它似乎不是!幸运的是,这意味着我不需要搞乱语言环境来解决我的问题。尽管如此,感谢提示! – Depressio 2013-03-27 18:17:16