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

标签 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,这都是不变的行为。

最佳答案

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

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

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

以上语句返回 7。

关于java - Java java.util.Calendar 中语言环境设置的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186208/

相关文章:

java - 如何在 Java 中将 Map<?,?> 转换为类型化 Map?

PHP检查用户输入日期

Java日期排序方法?

python - ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. (-3502) (SQLExecDirectW)')

objective-c - 使用 objective-c 中用户选择的时间创建NSDate

java - 使用java spring mvc调度任务

java - 将常量放在类中的位置 : standards and best practice

java - JMeter 的 web socket sampler 可以添加 header 信息吗?

java - 有没有办法在 null 时自动初始化变量

java - 时间广场日历app的实现方法