1

重複の可能性:
Javaで日付を1日インクリメントするにはどうすればよいですか?

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

推奨されるアプローチはどれですか?

4

3 に答える 3

2

moving.add(Calendar.DAY_OF_MONTH, 1);ロールは日を追加しますが、新しい日を追加する前に月の最後の日に達したときに別の月を追加しないため、を使用する必要があります。つまり、月が「6月」の場合、6月1日、2日、3日... 30日になると、7月1日が予想されますが、6月1日からやり直します。

于 2012-10-18T09:19:31.047 に答える
2
moving.add(Calendar.DATE, 1);

あなたが望むことをします。

参照してくださいCalendar#add(int, int)

カレンダのルールに基づいて、指定されたカレンダフィールドに指定された時間を加算または減算します。

そしてCalendar.DATE

月の日を示すgetおよびsetのフィールド番号。

于 2012-10-18T09:21:22.800 に答える
1

add()カレンダーの方法を使うのは簡単です。年を追加する場合は、likecalendar.add(Calendar.YEAR, 1);またはを使用して年を減らしcalendar.add(Calendar.YEAR, -1);ます。適切な日時を設定した後、を使用して日付を自分の形式に変換できますSimpleDateFormat

于 2012-10-18T09:29:52.683 に答える