【问题标题】:What is purpose of locale setting in Java java.util.Calendar?Java java.util.Calendar 中语言环境设置的目的是什么?
【发布时间】:2013-03-03 13:34:46
【问题描述】:

我正在通过 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,这都是不变的行为。

【问题讨论】:

  • 尝试退出 cal.setTime(new Date());
  • @MiguelPrz - 没有变化

标签: java date calendar locale


【解决方案1】:

语言环境会影响一周的第一天。但是,日期值是常量,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。

【讨论】:

  • 不,它对我不起作用。 Calendar cal = GregorianCalendar.getInstance(tz, locale); System.out.println(cal.getTime()); cal.setFirstDayOfWeek(Calendar.MONDAY); System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 今天(周日)仍然返回 1。
  • @user1315357 抱歉,请查看新编辑。我认为这是一些误解,日值是常数,只有“一周的第一天”会随着语言环境的变化而变化。也可以看这个链接:Week start
  • 谢谢,这对我有帮助。这确实回答了 OP。
【解决方案2】:

最后我使用了Joda Time库:

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

今天(星期日)返回 7。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2019-03-24
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多