我希望将日期存储到日历对象中,如下所示:
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
我做错了什么?
答案 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