Java Calendar返回错误的月份

时间:2017-06-27 06:29:47

标签: java date calendar

我希望将日期存储到日历对象中,如下所示:

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.JUNE);
cal.set(Calendar.DAY_OF_YEAR, 26);
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

除了月份之外,所有值都设置正确,如果我调用cal.getTime(),则返回:

Thu Jan 26 10:00:00 CET 2017

我做错了什么?

2 个答案:

答案 0 :(得分:4)

当您使用DAY_OF_YEAR时,您可以设置当前年份的数字日期。

  

DAY_OF_YEAR 获取和设置的字段编号,表示日期编号   在今年内。

这会覆盖所有明智的配置,例如月份或年份(当天和当月的月份)。

因此,您可以使用DAY_OF_YEAR而不是使用DAY_OF_MONTH,这似乎就是您要查找的内容,而是设置您之前设置的月份日期。

  

DAY_OF_MONTH 获取和设置的字段编号,表示该月的某一天。这是DATE的同义词。该月的第一天的价值为1。

因此,您正在寻找的配置似乎就像下一个:

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.JUNE);
cal.set(Calendar.DAY_OF_MONTH , 26);
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

然后当你调用getTime时,你会得到:

  

Mon Jun 26 11:00:00 CEST 2017

答案 1 :(得分:1)

如“Why Java Calendar set(int year, int month, int date) not returning correct date?”中所述,这是一种初始化日历对象的简便方法。

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(2017, Calendar.JUNE, 26, 9, 0, 0);
cal.set(Calendar.MILLISECOND, 0);


System.out.println(cal.getTime());
  

Mon Jun 26 11:00:00 CEST 2017