4

我正在通过 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。

4

2 回答 2

10

语言环境会影响一周的第一天。但是,日期值是常量,SUNDAY始终为 1。您可以查看此链接。该get()方法只返回正确的字段值(如果返回 7 则错误 - 7 是SATURDAY,而不是当前日期)。

但是您可以调用getFirstDayOfWeek()它,它会返回 2 ( MONDAY)。我认为这就是你所需要的。您可以利用这两种方法来实现您的目标。

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

上述语句返回 7。

于 2013-03-03T14:09:27.883 回答
-7

最后我使用了 Joda Time库:

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

今天(星期日)返回 7。

于 2013-03-03T17:37:22.263 回答