zodiac2k's Blog

Zeitbereiche in Monaten zwischen zwei Daten

Programmierung > Java

In speziellen Fällen, beispielsweise bei einer Jahresrechnung, müssen monatliche Statistiken erstellt werden. Da oftmals die Zeitbereiche nicht am 1. Januar anfangen und am 31. Dezember enden, müssen die Zeitbereiche in Monatsabschnitte unterteilt werden.

Hier ein kleines Beispiel, dass genau dies macht:

import java.util.Calendar;
import java.util.Date;
.
.
.
final Calendar cal = Calendar.getInstance();

final Date curr = new Date("Mon, 13 Dec 2014 00:00:00 GMT+0200");
final Date end = new Date("Mon, 12 Dec 2015 23:59:59 GMT+0200");

cal.setTime(curr);

while (curr.before(end)) {
    //Werte des Zeitbereichs
    final int month = Calendar.MONTH;
    final int year = Calendar.YEAR;
   
    //Zeitstempel vom Beginn des Zeitbereichs
    final Date dateStart = cal.getTime();
   
    //Monatsende berechnen
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    cal.set(Calendar.HOUR_OF_DAY, 23);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.SECOND, 59);
    cal.set(Calendar.MILLISECOND, 999);

    //Zeitstempel vom Monatsende
    Date dateEnd = cal.getTime();

    //Falls der End-Datum vor dem Monatsende liegt
    if (dateEnd.after(end)) {
        dateEnd = end;
        break;
    }

    curr.setTime(dateEnd.getTime() + 1000);
    cal.setTime(curr);
}


Verfasst am 02.09.2015