如何获得星期一开始的特定日期的星期几?
日历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.
块引用
一周的第一天值从当前的区域设置的。如果您未设置日历的语言环境(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
看起来'Calendar.firstDayOfWeek'与根问题并不真正相关。我认为这可能是,但它似乎不是!幸运的是,这意味着我不需要搞乱语言环境来解决我的问题。尽管如此,感谢提示! – Depressio 2013-03-27 18:17:16
OK可以找到,所以我还要做什么,我做了上述其中工程。至少它会始终如一,不管区域设置如何,因为Calendar.MONDAY总是2. – Depressio 2013-03-27 18:15:48