Java - Datum und Uhrzeit

Java bietet die Date Klasse verfügbar in java.util Paket, diese Klasse kapselt das aktuelle Datum und die aktuelle Uhrzeit.

Die Date-Klasse unterstützt zwei Konstruktoren, wie in der folgenden Tabelle gezeigt.

Sr.Nr. Konstruktor & Beschreibung
1

Date( )

Dieser Konstruktor initialisiert das Objekt mit dem aktuellen Datum und der aktuellen Uhrzeit.

2

Date(long millisec)

Dieser Konstruktor akzeptiert ein Argument, das der Anzahl der Millisekunden entspricht, die seit Mitternacht, dem 1. Januar 1970, vergangen sind.

Es folgen die Methoden der Datumsklasse.

Sr.Nr. Methode & Beschreibung
1

boolean after(Date date)

Gibt true zurück, wenn das aufrufende Date-Objekt ein Datum enthält, das nach dem durch date angegebenen Datum liegt. Andernfalls wird false zurückgegeben.

2

boolean before(Date date)

Gibt true zurück, wenn das aufrufende Date-Objekt ein Datum enthält, das vor dem durch date angegebenen Datum liegt. Andernfalls wird false zurückgegeben.

3

Object clone( )

Dupliziert das aufrufende Date-Objekt.

4

int compareTo(Date date)

Vergleicht den Wert des aufrufenden Objekts mit dem des Datums. Gibt 0 zurück, wenn die Werte gleich sind. Gibt einen negativen Wert zurück, wenn das aufrufende Objekt vor dem Datum liegt. Gibt einen positiven Wert zurück, wenn das aufrufende Objekt nach dem Datum liegt.

5

int compareTo(Object obj)

Funktioniert identisch mit compareTo (Date), wenn obj der Klasse Date entspricht. Andernfalls wird eine ClassCastException ausgelöst.

6

boolean equals(Object date)

Gibt true zurück, wenn das aufrufende Date-Objekt dieselbe Uhrzeit und dasselbe Datum enthält wie das durch date angegebene. Andernfalls wird false zurückgegeben.

7

long getTime( )

Gibt die Anzahl der Millisekunden zurück, die seit dem 1. Januar 1970 vergangen sind.

8

int hashCode( )

Gibt einen Hash-Code für das aufrufende Objekt zurück.

9

void setTime(long time)

Legt die Uhrzeit und das Datum wie durch die Uhrzeit festgelegt fest. Dies entspricht einer verstrichenen Zeit in Millisekunden ab Mitternacht, dem 1. Januar 1970.

10

String toString( )

Konvertiert das aufrufende Date-Objekt in eine Zeichenfolge und gibt das Ergebnis zurück.

Aktuelles Datum und Uhrzeit abrufen

Dies ist eine sehr einfache Methode, um das aktuelle Datum und die aktuelle Uhrzeit in Java abzurufen. Sie können ein einfaches Datumsobjekt mit der toString () -Methode verwenden, um das aktuelle Datum und die aktuelle Uhrzeit wie folgt zu drucken:

Beispiel

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date using toString()
      System.out.println(date.toString());
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

on May 04 09:51:52 CDT 2009

Datumsvergleich

Im Folgenden finden Sie drei Möglichkeiten, um zwei Daten zu vergleichen:

  • Mit getTime () können Sie die Anzahl der Millisekunden ermitteln, die seit Mitternacht, dem 1. Januar 1970, für beide Objekte vergangen sind, und diese beiden Werte vergleichen.

  • Sie können die Methoden before (), after () und equals () verwenden. Da der 12. des Monats beispielsweise vor dem 18. liegt, gibt das neue Datum (99, 2, 12) vor (neues Datum (99, 2, 18)) true zurück.

  • Sie können die compareTo () -Methode verwenden, die von der Comparable-Schnittstelle definiert und von Date implementiert wird.

Datumsformatierung mit SimpleDateFormat

SimpleDateFormat ist eine konkrete Klasse zum Formatieren und Parsen von Datumsangaben in Bezug auf das Gebietsschema. Mit SimpleDateFormat können Sie zunächst benutzerdefinierte Muster für die Formatierung von Datum und Uhrzeit auswählen.

Beispiel

import java.util.*;
import java.text.*;

public class DateDemo {

   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

Einfache DateFormat-Formatcodes

Verwenden Sie zum Festlegen des Zeitformats eine Zeitmusterzeichenfolge. In diesem Muster sind alle ASCII-Buchstaben als Musterbuchstaben reserviert, die wie folgt definiert sind:

Charakter Beschreibung Beispiel
G Ära Bezeichner ANZEIGE
y Jahr in vier Ziffern 2001
M. Monat im Jahr Juli oder 07
d Tag im Monat 10
h Stunde in AM / PM (1 ~ 12) 12
H. Stunde am Tag (0 ~ 23) 22
m Minute in Stunde 30
s Zweiter in der Minute 55
S. Millisekunde 234
E. Tag in der Woche Dienstag
D. Tag im Jahr 360
F. Wochentag im Monat 2 (zweiter Mi. im Juli)
w Woche im Jahr 40
W. Woche im Monat 1
ein AM / PM-Marker PM
k Stunde am Tag (1 ~ 24) 24
K. Stunde in AM / PM (0 ~ 11) 10
z Zeitzone Östliche Standardzeit
' Escape für Text Trennzeichen
"" Einfaches Zitat `

Datumsformatierung mit printf

Die Formatierung von Datum und Uhrzeit kann sehr einfach verwendet werden printfMethode. Sie verwenden ein Zwei-Buchstaben-Format, beginnend mitt und endet in einem der Buchstaben der Tabelle, wie im folgenden Code gezeigt.

Beispiel

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date
      String str = String.format("Current Date/Time : %tc", date );

      System.out.printf(str);
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

Es wäre ein bisschen albern, wenn Sie das Datum mehrmals angeben müssten, um jedes Teil zu formatieren. Aus diesem Grund kann eine Formatzeichenfolge den Index des zu formatierenden Arguments angeben.

Der Index muss unmittelbar auf% folgen und mit einem $ abgeschlossen werden.

Beispiel

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display time and date
      System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Due date: February 09, 2004

Alternativ können Sie das Flag <verwenden. Es gibt an, dass das gleiche Argument wie in der vorhergehenden Formatspezifikation erneut verwendet werden sollte.

Beispiel

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display formatted date
      System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Due date: February 09, 2004

Umrechnungszeichen für Datum und Uhrzeit

Charakter Beschreibung Beispiel
c Vollständiges Datum und Uhrzeit Mo Mai 04 09:51:52 CDT 2009
F. ISO 8601 Datum 09.02.2004
D. US-formatiertes Datum (Monat / Tag / Jahr) 02/09/2004
T. 24 Stunden Zeit 18:05:19
r 12 Stunden Zeit 18:05:19 Uhr
R. 24 Stunden, keine Sekunden 18:05
Y. Vierstelliges Jahr (mit führenden Nullen) 2004
y Letzte zwei Ziffern des Jahres (mit führenden Nullen) 04
C. Die ersten beiden Ziffern des Jahres (mit führenden Nullen) 20
B. Voller Monatsname Februar
b Kurzname des Monats Feb.
m Zweistelliger Monat (mit führenden Nullen) 02
d Zweistelliger Tag (mit führenden Nullen) 03
e Zweistelliger Tag (ohne führende Nullen) 9
EIN Voller Wochentagsname Montag
ein Abgekürzter Wochentagsname Mo.
j Dreistelliger Tag des Jahres (mit führenden Nullen) 069
H. Zweistellige Stunde (mit führenden Nullen) zwischen 00 und 23 18
k Zweistellige Stunde (ohne führende Nullen) zwischen 0 und 23 18
ich Zweistellige Stunde (mit führenden Nullen) zwischen 01 und 12 06
l Zweistellige Stunde (ohne führende Nullen) zwischen 1 und 12 6
M. Zweistellige Minuten (mit führenden Nullen) 05
S. Zweistellige Sekunden (mit führenden Nullen) 19
L. Dreistellige Millisekunden (mit führenden Nullen) 047
N. Neunstellige Nanosekunden (mit führenden Nullen) 047000000
P. Morgen- oder Nachmittagsmarkierung in Großbuchstaben PM
p Morgen- oder Nachmittagsmarkierung in Kleinbuchstaben Uhr
z RFC 822 numerischer Offset von GMT -0800
Z. Zeitzone PST
s Sekunden seit 1970-01-01 00:00:00 GMT 1078884319
Q. Millisekunden seit 1970-01-01 00:00:00 GMT 1078884319047

Es gibt andere nützliche Klassen in Bezug auf Datum und Uhrzeit. Weitere Informationen finden Sie in der Java Standard-Dokumentation.

Analysieren von Zeichenfolgen in Daten

Die SimpleDateFormat-Klasse verfügt über einige zusätzliche Methoden, insbesondere parse (), mit denen versucht wird, eine Zeichenfolge gemäß dem im angegebenen SimpleDateFormat-Objekt gespeicherten Format zu analysieren.

Beispiel

import java.util.*;
import java.text.*;
  
public class DateDemo {

   public static void main(String args[]) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 
      String input = args.length == 0 ? "1818-11-11" : args[0]; 

      System.out.print(input + " Parses as "); 
      Date t;
      try {
         t = ft.parse(input); 
         System.out.println(t); 
      } catch (ParseException e) { 
         System.out.println("Unparseable using " + ft); 
      }
   }
}

Ein Probelauf des obigen Programms würde das folgende Ergebnis ergeben:

Ausgabe

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

Eine Weile schlafen

Sie können für einen beliebigen Zeitraum von einer Millisekunde bis zur Lebensdauer Ihres Computers schlafen. Zum Beispiel würde das folgende Programm 3 Sekunden lang schlafen -

Beispiel

import java.util.*;
public class SleepDemo {

   public static void main(String args[]) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(5*60*10); 
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) {
         System.out.println("Got an exception!"); 
      }
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

Verstrichene Zeit messen

Manchmal müssen Sie den Zeitpunkt in Millisekunden messen. Schreiben wir also das obige Beispiel noch einmal neu -

Beispiel

import java.util.*;
public class DiffDemo {

   public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
         
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

Gregorianische Kalenderklasse

GregorianCalendar ist eine konkrete Implementierung einer Calendar-Klasse, die den normalen Gregorian-Kalender implementiert, mit dem Sie vertraut sind. Wir haben die Kalenderklasse in diesem Tutorial nicht besprochen. Sie können dazu die Standard-Java-Dokumentation nachschlagen.

Das getInstance( )Die Methode des Kalenders gibt einen Gregorianischen Kalender zurück, der mit dem aktuellen Datum und der aktuellen Uhrzeit im Standardgebietsschema und in der Standardzeitzone initialisiert wurde. GregorianCalendar definiert zwei Felder: AD und BC. Diese repräsentieren die beiden im Gregorianischen Kalender definierten Epochen.

Es gibt auch mehrere Konstruktoren für GregorianCalendar-Objekte -

Sr.Nr. Konstruktor & Beschreibung
1

GregorianCalendar()

Erstellt einen Standard-Gregorianischen Kalender unter Verwendung der aktuellen Zeit in der Standardzeitzone mit dem Standardgebietsschema.

2

GregorianCalendar(int year, int month, int date)

Erstellt einen Gregorianischen Kalender mit dem angegebenen Datum in der Standardzeitzone mit dem Standardgebietsschema.

3

GregorianCalendar(int year, int month, int date, int hour, int minute)

Erstellt einen Gregorianischen Kalender mit dem angegebenen Datum und der angegebenen Uhrzeit für die Standardzeitzone mit dem Standardgebietsschema.

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

Erstellt einen Gregorianischen Kalender mit dem angegebenen Datum und der angegebenen Uhrzeit für die Standardzeitzone mit dem Standardgebietsschema.

5

GregorianCalendar(Locale aLocale)

Erstellt einen Gregorianischen Kalender basierend auf der aktuellen Zeit in der Standardzeitzone mit dem angegebenen Gebietsschema.

6

GregorianCalendar(TimeZone zone)

Erstellt einen Gregorianischen Kalender basierend auf der aktuellen Zeit in der angegebenen Zeitzone mit dem Standardgebietsschema.

7

GregorianCalendar(TimeZone zone, Locale aLocale)

Erstellt einen Gregorianischen Kalender basierend auf der aktuellen Zeit in der angegebenen Zeitzone mit dem angegebenen Gebietsschema.

Hier ist die Liste einiger nützlicher Unterstützungsmethoden, die von der GregorianCalendar-Klasse bereitgestellt werden:

Sr.Nr. Methode & Beschreibung
1

void add(int field, int amount)

Fügt dem angegebenen Zeitfeld die angegebene (signierte) Zeit hinzu, basierend auf den Regeln des Kalenders.

2

protected void computeFields()

Konvertiert UTC als Millisekunden in Zeitfeldwerte.

3

protected void computeTime()

Kalender überschreibt Konvertiert Zeitfeldwerte als Millisekunden in UTC.

4

boolean equals(Object obj)

Vergleicht diesen Gregorianischen Kalender mit einer Objektreferenz.

5

int get(int field)

Ruft den Wert für ein bestimmtes Zeitfeld ab.

6

int getActualMaximum(int field)

Gibt den Maximalwert zurück, den dieses Feld bei aktuellem Datum haben könnte.

7

int getActualMinimum(int field)

Gibt den Mindestwert zurück, den dieses Feld angesichts des aktuellen Datums haben könnte.

8

int getGreatestMinimum(int field)

Gibt den höchsten Mindestwert für das angegebene Feld zurück, wenn er variiert.

9

Date getGregorianChange()

Ruft das Änderungsdatum des Gregorianischen Kalenders ab.

10

int getLeastMaximum(int field)

Gibt den niedrigsten Maximalwert für das angegebene Feld zurück, wenn er variiert.

11

int getMaximum(int field)

Gibt den Maximalwert für das angegebene Feld zurück.

12

Date getTime()

Ruft die aktuelle Uhrzeit dieses Kalenders ab.

13

long getTimeInMillis()

Ruft die aktuelle Zeit dieses Kalenders als lang ab.

14

TimeZone getTimeZone()

Ruft die Zeitzone ab.

15

int getMinimum(int field)

Gibt den Mindestwert für das angegebene Feld zurück.

16

int hashCode()

Überschreibt den Hashcode.

17

boolean isLeapYear(int year)

Bestimmt, ob das angegebene Jahr ein Schaltjahr ist.

18

void roll(int field, boolean up)

Addiert oder subtrahiert (nach oben / unten) eine einzelne Zeiteinheit für das angegebene Zeitfeld, ohne größere Felder zu ändern.

19

void set(int field, int value)

Legt das Zeitfeld mit dem angegebenen Wert fest.

20

void set(int year, int month, int date)

Legt die Werte für die Felder Jahr, Monat und Datum fest.

21

void set(int year, int month, int date, int hour, int minute)

Legt die Werte für die Felder Jahr, Monat, Datum, Stunde und Minute fest.

22

void set(int year, int month, int date, int hour, int minute, int second)

Legt die Werte für die Felder Jahr, Monat, Datum, Stunde, Minute und Sekunde fest.

23

void setGregorianChange(Date date)

Legt das Änderungsdatum für GregorianCalendar fest.

24

void setTime(Date date)

Legt die aktuelle Uhrzeit dieses Kalenders mit dem angegebenen Datum fest.

25

void setTimeInMillis(long millis)

Legt die aktuelle Zeit dieses Kalenders ab dem angegebenen langen Wert fest.

26

void setTimeZone(TimeZone value)

Legt die Zeitzone mit dem angegebenen Zeitzonenwert fest.

27

String toString()

Gibt eine Zeichenfolgendarstellung dieses Kalenders zurück.

Beispiel

import java.util.*;
public class GregorianCalendarDemo {

   public static void main(String args[]) {
      String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
         "Oct", "Nov", "Dec"};
      
      int year;
      // Create a Gregorian calendar initialized
      // with the current date and time in the
      // default locale and timezone.
      
      GregorianCalendar gcalendar = new GregorianCalendar();
      
      // Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));

      // Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }else {
         System.out.println("The current year is not a leap year");
      }
   }
}

Dies führt zu folgendem Ergebnis:

Ausgabe

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

Eine vollständige Liste der in der Kalenderklasse verfügbaren Konstanten finden Sie in der Standard-Java-Dokumentation.