Java java.util.Calendar中区域设置的目的是什么?

时间:2013-03-03 13:34:46

标签: 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/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,但无论使用Locale还是TimeZone,我都必须确保这是不变的行为。

2 个答案:

答案 0 :(得分:8)

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

但你可以拨打getFirstDayOfWeek()并返回2(MONDAY)。我想这就是你需要的。您可以使用这两种方法来实现目标。

System.out.println((cal.get(Calendar.DAY_OF_WEEK) - cal.getFirstDayOfWeek() + 7) % 7 + 1);

以上陈述返回7.

答案 1 :(得分:-7)

最后我使用了Joda Time库:

DateTime dt = new DateTime(new Date());
int dayOfWeek = dt.getDayOfWeek();

今天(星期日)返回7。