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做我想做的事情?
答案 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