~Java4Beginners~
~Java4Beginners~

Klasse LocalDate

Es gibt in Java eine Vielzahl von Klassen, die sich mit Datum und Zeit befassen. Mit JRE 1.8 wurde die Klasse LocalDate in die JRE implementiert.

Notwendiger Import


import java.time.LocalDate;

Objekt und Methoden

Um nun einer Variablen vom ObjektTyp LocalDate ein Datum zuzuweisen (Es muss keine Instanz von LocalDate erzeugt werden, da LocalDate static deklariert ist) bedienen wir uns der Methode of der Klasse LocalDate.
Die Klasse LocalDate stellt uns verschiedene Methoden zur Verfügung, mit welcher wir verschiedenste Manipulationen am Datum vornehmen können. Nachfolgend eine kleine Auswahl derselbigen.
Methode Beschreibung
now() Erzeugt das aktuelle Datum im Format yyyy-mm-dd
of(int Jahr, int Monat, int Tag) Erzeugt das Datum im Format yyyy-mm-dd
of(int Jahr, Monat.Konstante, int Tag) Erzeugt das Datum im Format yyyy-mm-dd
atStartOfDay() Fügt einem Datum die Startzeit Mitternacht hinzu.
atTime(h,m) Erzeugt ein Datum-Zeit-Objekt mit dem aktuellen Datum und der angegebenen Zeit (h = Stunde als int-Wert, m = Minuten als int-Wert).
atTime(h,m,s) Erzeugt ein Datum-Zeit-Objekt mit dem aktuellen Datum und der angegebenen Zeit (h = Stunde als int-Wert, m = Minuten als int-Wert, s = Sekunden als int-Wert).
atTime(h,m,s,ns) Erzeugt ein Datum-Zeit-Objekt mit dem aktuellen Datum und der angegebenen Zeit (h = Stunde als int-Wert, m = Minuten als int-Wert, s = Sekunden als int-Wert, ns = Nano-Sekunden als int-Wert).
atTime(LocalTime.now()) Erzeugt ein Datum-Zeit-Objekt mit dem aktuellen Datum und der aktuellen Zeit.
equals(Objekt) Vergleicht, ob zwei LocalDate-Objekte identisch sind. Liefert true, wenn das Datum jedes Objektes gleich ist.
format(formatter) Formatiert die Datumsanzeige auf das im formatter (Aus Klasse DateTimeFormatter) angegebene Format, z. B. dd.mm.yyyy.
getDayOfWeek() Gibt den Wochentag als DayOfWeek-Objekt zurück
getDayOfMonth() Gibt als Int-Wert zurück, der wievielte Tag im Monat es ist.
getDayOfYear() Gibt als Int-Wert zurück, der wievielte Tag im Jahr es ist.
getMonth() Gibt den Monat als Monats-Objekt zurück (ausgeschriebener Monatsname)
getMonthValue() Gibt den Monatswert als int-Wert (Januar = 1, Februar = 2 ..... Dezember = 12) zurück.
getYear() Gibt die Jahreszahl als int-Wert zurück.
isAfter(pruefdatum) Prüft, ob das Datum nach dem pruefdatum liegt. Wenn ja, ist der Rückgabewert true.
isBefore(pruefdatum) Prüft, ob das Datum vor dem pruefdatum liegt. Wenn ja, ist der Rückgabewert true.
isEqual(pruefdatum) Prüft, ob das Datum identisch mit dem pruefdatum ist. Wenn ja, ist der Rückgabewert true.
isLeapYear() Prüft, ob das Datum in einem Schaltjahr liegt. Wenn ja, dann ist der Rückgabwert true.
lengthOfMonth() Die Anzahl der Tage des Datummonats wird als int-Wert zurückgegeben.
lengthOfYear() Als Rückgabewert erhalten wir die Anzahl der Tage im Jahr.
minusDays(longwert) Subtrahiert die angegebenen Tage vom Datum.
minusWeeks(longwert) Subtrahiert die angegebenen Wochen vom Datum.
minusMonths(longwert) Subtrahiert die angegebenen Monate vom Datum.
minusYears(longwert) Subtrahiert die angegebenen Jahre vom Datum.
parse(String) Erstellt ein LocalDate-Objekt mit dem als String angegebenen Datum. (Format im String muss hier yyyy-mm-dd sein)
parse(String, Formatter) Erstellt ein LocalDate-Objekt mit dem als String angegebenen Datum. Das Format ist abhängig von der im DateTimeFomatter festgelegten Format, z. B. dd.mm.yyyy (Hier muss im String so was wie 21.03.2013 stehen).
plusDays(longwert) Addiert die angegebenen Tage zum Datum hinzu.
plusWeeks(longwert) Addiert die angegebenen Wochen zum Datum hinzu.
plusMonths(longwert) Addiert die angegebenen Monate zum Datum hinzu.
plusYears(longwert) Addiert die angegebenen Jahre zum Datum hinzu.
withYear(intJahr) Gibt das Datum mit der angegebenen Jahreszahl aus.
withMonth(intMonth) Gibt das Datum mit dem angegebenen Monat aus.
Mit den Methoden der Klasse LocalDate können wir somit z. B. auf einfachste Weise ermitteln, ob jemand Geburtstag hat oder nicht. Nehmen wir an, wir lesen aus einer Datenbank, oder aus einer CSV-Datei das Geburtsdatum aus und wollen überprüfen, ob dieser ein Geburtstag ist. Nun könnte man theoretisch von beiden Datum die Tage und Monate ermitteln und diese miteinander vergleichen. Viel eleganter ist es allerdings, in dem ich dem Geburtstagsdatum mit withYear(datum) das Jahr des aktuellen Datums übergebe und mit isEqual vergleich, ob die beiden Datumsangaben nun identisch sind.

geburtstag.withYear(datum.getYear()).isEqual(datum);
Eine weitere Möglichkeit ist es, das tatsächliche Alter von jemanden zu ermitteln, in dem wir das aktuelle Datum mit dem Geburtsdatum vergleichen.

        LocalDate gebtag = LocalDate.of(1974,1,20);
        int alter =  LocalDate.now().compareTo(gebtag);
        System.out.println( alter);

Monatskonstanten

Bei der Erzeugung eines Datum-Objekts haben wir die Möglichkeit, anstelle vom int-Wert 1 für das Monat, eine Konstante der Klasse Month zu verwenden. Da LocalDate erst seid der JDK 1.8 implementiert ist, wurde in früheren Versionen die Klasse GregorianCalendar verwendet. Nachteil dieser Klasse, und der Grund für die Konstanten der Klasse Month ist, dass die Klasse GregorianCalendar bei der Monatsangabe nicht mit 1 für Januar beginnt, sondern dort ist der int-Wert 0 der Januar.
Folgende Konstanten stehen somit für die Monatsangabe über die Klasse Month zur Verfügung.
  • JANUARY
  • FEBRUARY
  • MARCH
  • APRIL
  • MAY
  • JUNE
  • JULY
  • AUGUST
  • SEPTEMBER
  • OCTOBER
  • NOVEMBER
  • DECEMBER

dayOfWeek - Konstanten

Die Klasse dayOfWeek stellt 7 Konstanten zur Verfügung.
  • MONDAY
  • TUESDAY
  • WEDNESDAY
  • THURSDAY
  • FRIDAY
  • SATURDAY
  • SUNDAY

Beispielprogramm


import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Month;
import java.time.format.DateTimeFormatter;

/**
 * Beispielprogramm für den Umgang mit LocalDate
 * @author Markus Badzura
 */
public class Datum 
{    
    public static void main(String[] args) 
    {
        String dateEP = "1974-01-20";
        LocalDate datum = LocalDate.now();
        LocalDate datumV = LocalDate.now();
        LocalDate datumE = LocalDate.of(1974,1,20);
        LocalDate datumS = LocalDate.of(2120,Month.JULY,20);
        DateTimeFormatter df = DateTimeFormatter.ofPattern("dd.MM.yyyy");
        LocalDate datumEP = LocalDate.parse(dateEP);
        LocalDate datumEP1 = LocalDate.parse("20.01.1974",df);
        System.out.println("Heutiges Datum: "+datum);
        System.out.println("LocalDate.of(1974,1,20) : "+datumE);
        System.out.println("LocalDate.of(2120,Month.JULY,20)  : "+datumS);
        System.out.println("LocalDate.parse(\"1974-01-20\"): "+datumEP);
        System.out.println("LocalDate.parse(\"20.01.1974\", format  : "+datumEP1);
        System.out.println("Methode: atStartOfDay(): "+datum.atStartOfDay());
        System.out.println("Methode: atTime(h,m): "+datum.atTime(18,20));
        System.out.println("Methode: atTime(h,m,s): "+datum.atTime(18,20,22));
        System.out.println("Methode: atTime(h,m,s,ns): "+datum.atTime(18,20,22,33));
        System.out.println("Methode: atTime(time): "+datum.atTime(LocalTime.now()));
        System.out.println("Methode: equals(Objekt): "+datum.equals(datumV));
        System.out.println("Methode: format(formatter): "+datum.format(df));
        System.out.println("Methode: getDayOfWeek(): "+datum.getDayOfWeek());
        System.out.println("Methode: getDayOfMonth(): "+datum.getDayOfMonth());
        System.out.println("Methode: getDayOfYear(): "+datum.getDayOfYear());
        System.out.println("Methode: getMonth(): "+datum.getMonth());
        System.out.println("Methode: getMonthValue(): "+datum.getMonthValue());
        System.out.println("Methode: getYear(): "+datum.getYear());
        System.out.println("Methode: isAfter(D1): "+datum.isAfter(datumE));
        System.out.println("Methode: isBefore(D1): "+datum.isBefore(datumE));
        System.out.println("Methode: isEqual(D1): "+datum.isEqual(datumE));
        System.out.println("Methode: isLeapYear(): "+datum.isLeapYear());
        System.out.println("Methode: lengthOfMonth(): "+datum.lengthOfMonth());
        System.out.println("Methode: lengthOfYear(): "+datum.lengthOfYear());
        System.out.println("Methode: minusDays(20): "+datum.minusDays(20));
        System.out.println("Methode: minusWeeks(20): "+datum.minusWeeks(20));
        System.out.println("Methode: minusMonths(20): "+datum.minusMonths(20));
        System.out.println("Methode: minusYears(20): "+datum.minusYears(20));
        System.out.println("Methode: plusDays(20): "+datum.plusDays(20));
        System.out.println("Methode: plusWeeks(20): "+datum.plusWeeks(20));
        System.out.println("Methode: plusMonths(20): "+datum.plusMonths(20));
        System.out.println("Methode: plusYears(20): "+datum.plusYears(20)); 
        System.out.println("Methode: withYear(2020): "+datum.withYear(2020));
        System.out.println("Methode: withMonth(12): "+datum.withMonth(12));
        LocalDate geburtstag = LocalDate.parse("1983-02-28");
        if (geburtstag.withYear(datum.getYear()).isEqual(datum)) 
            System.out.println("Gratulation");
    }
}
nach oben Java4Beginners -- Seitenversion 1.01 -- Stand: 2017-05-17