1. DateKlasse und Unix-Zeit

Seit den Anfängen von Java verfügt die Sprache über eine spezielle Klasse für die Arbeit mit Zeiten und Daten – Date. Im Laufe der Zeit erschienen mehrere weitere Klassen für die Arbeit mit Datumsangaben, aber Programmierer verwenden die DateKlasse auch heute noch.

Dies liegt daran, dass es sehr einfach und bequem ist. Und als Programmierer wird man darauf in jedem echten Projekt stoßen. Ob Sie es verwenden oder nicht, liegt bei Ihnen, aber Sie müssen es wissen. Schenken Sie ihm also ein paar Minuten Ihrer kostbaren Zeit.

Was macht den DateKurs so gut? Seine Einfachheit.

Die DateKlasse speichert Datums- und Zeitinformationen als Anzahl der Millisekunden, die seit dem 1. Januar 1970 vergangen sind. Das sind viele Millisekunden, daher longwird der Typ zum Speichern dieser verwendet.

Interessant.

Warum gerade seit 1970? Dies ist die sogenannte Unix-Zeit : Auf diese Weise misst das Unix-Betriebssystem, das der Urvater aller modernen Betriebssysteme ist, die Zeit.

Sie können jedoch ganz einfach herausfinden, wie viel Zeit zwischen zwei Datumsangaben vergangen ist: Subtrahieren Sie einfach ein Datum vom anderen und Sie erhalten den Zeitunterschied zwischen den Datumsangaben auf die nächste Millisekunde genau.

Hier finden Sie einige nützliche Beispiele für die Arbeit mit der DateKlasse.


2. Aktuelles Datum abrufen

Um die aktuelle Uhrzeit und das aktuelle Datum zu erhalten, erstellen Sie einfach ein DateObjekt. Jedes neue Objekt speichert den Zeitpunkt seiner Erstellung. Es sieht ganz einfach aus:

Date current = new Date();

Nach der Ausführung dieses Befehls currentspeichert die Variable einen Verweis auf das erstellte DateObjekt, das intern den Zeitpunkt seiner Erstellung speichert – die Anzahl der Millisekunden, die seit dem 1. Januar 1970 vergangen sind.

Anzeige des aktuellen Datums auf dem Bildschirm

Um das aktuelle Datum anzuzeigen, gehen Sie einfach wie folgt vor: a) Erstellen Sie ein neues DateObjekt, b) drucken Sie es mit der System.out.println()Methode auf dem Bildschirm aus.

Beispiel:

Code Konsolenausgabe
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Die Konsolenausgabe bedeutet Folgendes:

Text Deutung
Donnerstag _ Donnerstag
21. Februar 21. Februar
14:01:34 Stunden : Minuten : Sekunden
osteuropäische Zeit, elektronischer Energietransfer, voraussichtliche Flugdauer Zeitzone: Osteuropäische Zeit
2019 Jahr

3. Festlegen eines bestimmten Datums

Wir haben herausgefunden, wie wir die aktuelle Uhrzeit ermitteln, aber wie erstellen wir ein DateObjekt, das ein anderes Datum oder eine andere Uhrzeit speichert?

Auch hier ist alles einfach. Um ein bestimmtes Datum festzulegen, müssen Sie Code wie diesen schreiben:

Date birthday = new Date(year, month, day);

Alles ist einfach und offensichtlich, aber es gibt zwei Nuancen, die Sie beachten sollten:

  1. Das Jahr muss ab 1900 gezählt werden.
  2. Monate werden von Null an nummeriert.
Interessant.

Dies ist ein weiteres Erbe des Unix-Betriebssystems: Unter Unix bezeichneten Programmierer das Jahr mit zwei Ziffern. Statt 1977 schrieben sie einfach 77. 77 ist also die richtige Jahreszahl, wenn wir ab 1900 zählen.

Ich wurde zum Beispiel am 21. März 1989 geboren. März ist der dritte Monat, also muss ich schreiben:

Code Konsolenausgabe
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Monate werden von Null an nummeriert, Tage jedoch nicht. Das ist schon ein bisschen seltsam, oder?

Wir meinen, echte Programmierer hätten sich durchsetzen und auch die Tage des Monats von Null an durchnummerieren sollen. Oh, diese Konformisten 🙂

Festlegen einer bestimmten Zeit

Auch das Festlegen einer bestimmten Zeit ist ganz einfach: Dazu müssen Sie eine Anweisung wie diese schreiben:

Date birthday = new Date(year, month, day, hour, minutes, seconds);

Stunden, Minuten und Sekunden werden von Null an nummeriert: Lassen Sie den Programmierer in Ihnen aufatmen.

Beispiel:

Code Konsolenausgabe
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Wir stellen die Uhrzeit auf 12:15 Uhr und das Datum auf den 4. Juni 2005 ein . Für einen Nicht-Programmierer ist es etwas schwierig zu lesen, aber es funktioniert wie es sollte.


4. Arbeiten mit Elementen eines Datums

Sie können mit einem DateObjekt mehr machen, als es nur anzuzeigen. Es verfügt über Methoden , mit denen Sie einzelne Elemente des intern gespeicherten Datums abrufen können:

Methode Beschreibung
int getYear()
Gibt das Jahr des Datums relativ zu 1900 zurück.
int getMonth()
Gibt den Monat des Datums zurück (Monate werden von Null an nummeriert)
int getDate()
Gibt den Tag des Monats zurück
int getDay()
Gibt den Wochentag zurück
int getHours()
Gibt die Stunden zurück
int getMinutes()
Gibt die Minuten zurück
int getSeconds()
Gibt die Sekunden zurück

Beispiel:

Code Konsolenausgabe Notiz
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005
Juni
Tag des Monats
Samstag

Mit einem Objekt lassen sich übrigens Datenicht nur einzelne Elemente eines Datums abrufen, sondern auch verändern:

Methode Beschreibung
void setYear(int year) Ändert das Jahr des Datums. Die Jahresangabe erfolgt relativ zum Jahr 1900.
void setMonth(int month) Ändert den Monat des Datums (Monate werden von Null an nummeriert)
void setDate(int date) Ändert den Tag des Monats
void setHours(int hours) Ändert die Öffnungszeiten
void setMinutes(int minutes) Ändert Minuten
void setSeconds(int seconds) Ändert Sekunden

5. Millisekunden

Wie bereits erwähnt, Datespeichert das Objekt die Anzahl der Millisekunden, die seit dem 1. Januar 1970 vergangen sind.

DateWenn wir diese Nummer benötigen, können wir sie aus dem Objekt abrufen :

long time = date.getTime();

Die getTime()Methode gibt die Anzahl der im DateObjekt gespeicherten Millisekunden zurück.

Sie können nicht nur die Anzahl der Millisekunden ermitteln, sondern diese Zahl auch in einem vorhandenen Objekt ändern:

Date date = new Date();
date.setTime(1117876500000L);

Übrigens können Sie dies noch prägnanter formulieren, indem Sie die Zeit Datedirekt bei der Erstellung des Objekts weitergeben:

Date date = new Date(1117876500000L);

6. Daten vergleichen

Wenn Sie zwei Termine vergleichen und herausfinden möchten, welcher zuerst kam, haben Sie drei Möglichkeiten

Die erste Möglichkeit besteht darin, einfach die Anzahl der Millisekunden zu vergleichen, die sie jeweils speichern:

if (date1.getTime() < date2.getTime())

Die zweite Möglichkeitbefore() besteht darin, die Methode eines Objekts zu verwenden Date:

if (date1.before(date2))

Es liest sich so: wenn date1kommt vorher date2, dann...

Die dritte Möglichkeitafter() besteht darin, die Methode eines DateObjekts zu verwenden :

if (date2.after(date1))

Es liest sich so: if date2is after date1, then...


7. DateFormatKlasse

Denken Sie daran, als wir das Datum auf dem Bildschirm anzeigten, sahen wir etwa Folgendes: Thu Feb 21 14:01:34 EET 2019. Alles scheint korrekt zu sein, aber das Format entspricht eher der Darstellung eines Datums für Programmierer als für normale Menschen. Wir möchten das Datum für Benutzer übersichtlicher anzeigen. So etwas wie Tuesday, February 21.

Und ohne Jahresangabe. Oder bei Bedarf auch mit einem Jahr. Generell möchten wir das Datum auf unterschiedliche Weise anzeigen können.

Dafür gibt es eine spezielle Klasse: SimpleDateFormat.

Beispiel:

Code
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
Konsolenausgabe
Jun-04-2005

Schauen Sie sich an, was das Programm angezeigt hat: Jun-04-2005. Das ist überhaupt nicht mehr das, was es einmal war.

Der Unterschied besteht darin, dass wir nicht das DateObjekt selbst angezeigt haben, sondern eine spezielle Zeichenfolge, die durch den Aufruf der format()Methode für ein SimpleDateFormatObjekt erhalten wurde. Aber das ist hier noch nicht einmal der Hauptpunkt.

Als das Objekt erstellt wurde, haben wir die Zeichenfolge als Parameter SimpleDateFormatübergeben . "MMM-dd-YYYY"Es ist diese Zeichenfolge, die das Datumsformat übermittelt, das wir letztendlich in der Konsolenausgabe gesehen haben.

  • MMM zeigt an, dass der Name des Monats angezeigt wird, abgekürzt mit drei Buchstaben
  • dd gibt an, den Tag des Monats anzuzeigen
  • YYYY gibt an, das Jahr vierstellig anzuzeigen

MMMWenn wir den Monat als Zahlen ausgeben möchten, müssen wir statt schreiben MM, was das Muster ergibt "MM-dd-YYYY". Die Bildschirmausgabe erfolgt06-04-2005

Wir werden diese Klasse später ausführlicher besprechen.


8. Date.parseMethode

Die DateKlasse kann noch etwas anderes Interessantes und Nützliches tun – sie kann ein Datum aus einer Zeichenfolge abrufen. Oder, wie Programmierer sagen, es kann einen String analysieren.

parse()Dafür gibt es eine spezielle Methode. Das Parsen sieht folgendermaßen aus:

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

Dieser Code lässt sich übrigens kompakter schreiben:

Date date = new Date("Jul 06 12:15:00 2019");

Wir werden uns in anderen Lektionen ausführlicher mit dem Parsen von Strings befassen.