Java.util.Calendar中设置语言环境的目的是什么?

Java.util.Calendar中设置语言环境的目的是什么?,java,date,calendar,locale,Java,Date,Calendar,Locale,我通过Java.util.Calendar获取Java中特定日期的信息(如周、月、年等的天数)。在我的情况下,是否有理由设置日历对象的区域设置?我在问,因为: System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 今天(星期日)的回报率始终是1,但在我们的地区(cs_CZ)应该是7 Locale locale = new Locale("cs", "CZ"); TimeZone tz = TimeZone.getTimeZone("Europe/

我通过Java.util.Calendar获取Java中特定日期的信息(如周、月、年等的天数)。在我的情况下,是否有理由设置日历对象的区域设置?我在问,因为:

System.out.println(cal.get(Calendar.DAY_OF_WEEK));
今天(星期日)的回报率始终是1,但在我们的地区(cs_CZ)应该是7

Locale locale = new Locale("cs", "CZ");
TimeZone tz = TimeZone.getTimeZone("Europe/Prague");

Calendar cal = GregorianCalendar.getInstance(tz, locale);
cal.setTime(new Date());

// returns => 1 (but I expected 7)
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 
// returns => 3 - it's OK
System.out.println(cal.get(Calendar.DAY_OF_MONTH));

编辑:我可以在周日使用1,但我必须确保这是不变的行为,无论使用的区域设置或时区如何。

区域设置do将影响一周的第一天。但是,日值是常量,
SUNDAY
始终为1。你可以查一下。
get()
方法只返回正确的字段值(如果它返回7,那么它是错误的——7是
SATURDAY
,而不是当前日期)

但是您可以调用
getFirstDayOfWeek()
,它返回2(
MONDAY
)。我想这就是你需要的。你可以使用这两种方法来达到你的目标

System.out.println((cal.get(Calendar.DAY_OF_WEEK) - cal.getFirstDayOfWeek() + 7) % 7 + 1);
上面的语句返回7。

最后我使用了库:


今天(星期日)返回7。

尝试退出cal.setTime(new Date())@MiguelPrz-不,不,这对我不起作用<代码>日历cal=GregorianCalendar.getInstance(tz,locale);System.out.println(cal.getTime());cal.setFirstDayOfWeek(日历:周一);System.out.println(cal.get(日历、星期几))今天(星期日)仍然返回1。@user1315357抱歉,请查看新编辑。我认为这是一种误解,日期值是常量,只有“一周的第一天”会随地区而变化。你也可以看到这个链接:谢谢,这帮助了我。这确实回答了OP。
DateTime dt = new DateTime(new Date());
int dayOfWeek = dt.getDayOfWeek();