public static ArrayList<Calendar> getCalendarsForThreeYears() {
if (calendars == null) {
calendars = new ArrayList<Calendar>();
final Calendar moving = Calendar.getInstance();
final int targetYear = moving.get(Calendar.YEAR) + 1;
moving.set(moving.get(Calendar.YEAR) - 1, Calendar.JANUARY, 1);
final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yy");
while (!(moving.get(Calendar.YEAR) == targetYear
&& moving.get(Calendar.MONTH) == Calendar.DECEMBER && moving
.get(Calendar.DAY_OF_MONTH) == 31)) {
final Calendar c = (Calendar) moving.clone();
calendars.add(c);
moving.roll(Calendar.DAY_OF_MONTH, 1);
System.out.println(sdf.format(c.getTime()));
}
}
return calendars;
}
我希望这为 3 年创建Calendar
个对象(当前,当前和下一个之前的对象)。
然而,这是一个无限循环,因为滚动Calendar.DAY_OF_MONTH
当它在月末时不会滚动Calendar.MONTH
推荐的方法是什么?
答案 0 :(得分:2)
您应该使用moving.add(Calendar.DAY_OF_MONTH, 1);
,因为roll会添加天数,但在您添加新的一天之前到达月中的最后一天时不会再添加一个月。
换句话说,如果您的月份是“六月”,您将获得6月1日,2日,3日,30日,那么您将期待7月1日,但您将在6月1日重新开始。
答案 1 :(得分:2)
moving.add(Calendar.DATE, 1);
会做你想做的事。
根据日历的规则,将指定的时间量添加或减去指定的日历字段。
获取和设置的字段编号,表示该月的日期。
答案 2 :(得分:1)
它简单地使用了Calendar的add()
方法。如果您想添加年份,请使用calendar.add(Calendar.YEAR, 1);
或减少年份calendar.add(Calendar.YEAR, -1);
。
设置正确的日期时间后,您可以使用SimpleDateFormat
将日期转换为格式。