Java-Datum/Uhrzeit

Das Folgende ist ein Vergleich der Hauptkategorien und eine Zusammenfassung der gängigen Methoden:

Kategorie Hauptklassen Threadsicher Veränderbarkeit Java-Version Funktionen
Legacy-Datum Date, Calendar,GregorianCalendar nein Veränderbar 1.0+ Viele Designfehler, nicht empfohlen
Neue Datums-/Zeit-API LocalDate, LocalTime, LocalDateTime, ZonedDateTime, ChronoUnit Ja Unveränderlich 8+ Gut durchdacht, empfohlen
Zeitstempel Instant Ja Unveränderlich 8+ Maschinenzeit, auf Nanosekunden genau
Formatierung DateTimeFormatter Ja Unveränderlich 8+ Threadsichere Formatierungsklasse

LocalDate/DateTimeFormatter

LocalDate/DateTimeFormatter sind in Java 8 eingeführte Datumsklassen. LocalDate wird verwendet, um ein Datum ohne Uhrzeit (Jahr-Monat-Tag) darzustellen, und DateTimeFormatter wird verwendet, um Datum-Zeit-Objekte zu formatieren und zu parsen.

Beispiel

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

public class ExampleTest {
    public static void main(String[] args) {
        // Aktuelles Datum abrufen
        LocalDate today = LocalDate.now();
        System.out.println("Aktuelles Datum: " + today);
       
        // Ein bestimmtes Datum erstellen
        LocalDate nationalDay = LocalDate.of(2025, 10, 1);
        System.out.println("Nationalfeiertag: " + nationalDay);
       
        // Datumsaddition und -subtraktion
        LocalDate tomorrow = today.plusDays(1);
        LocalDate nextMonth = today.plusMonths(1);
        LocalDate lastYear = today.minusYears(1);
       
        System.out.println("Morgen: " + tomorrow);
        System.out.println("Nächster Monat: " + nextMonth);
        System.out.println("Gleicher Tag letztes Jahr: " + lastYear);
    }
}

Die Ausgabe des obigen Beispiels ist:

当前日期: 2025-05-01
国庆节: 2025-10-01
明天: 2025-05-02
下个月: 2025-06-01
去年今天: 2024-05-01
  1. Neue Projekte sollten das Paket java.time bevorzugen (Java 8+)

  2. Vermeiden Sie die Verwendung der veralteten Date- und Calendar-Klassen

  3. Zeitzonenverwendung klar unterscheiden:

    • Keine Zeitzone erforderlich: LocalDate/LocalTime/LocalDateTime

    • Zeitzone erforderlich: ZonedDateTime

  4. Beachten Sie die Thread-Sicherheit beim Formatieren: Verwenden Sie DateTimeFormatter statt SimpleDateFormat

  5. Datenbankinteraktion:

    • JDBC 4.2+ unterstützt java.time-Typen nativ

    • Ältere Versionen können zu java.sql.Date/Timestamp konvertieren

1. LocalDate (Datum)

Beispiel

LocalDate today = LocalDate.now();
LocalDate date = Local.of(2023, Month.JUNE, 15);
int year = date.getYear();  // 2023
Month month = date.getMonth();  // JUNE
int day = date.getDayOfMonth();  // 15
LocalDate nextWeek = today.plusWeeks(1);
boolean isLeap = date.isLeapYear();  // Ist es ein Schaltjahr?

2. LocalTime (Uhrzeit)

Beispiel

LocalTime now = LocalTime.now();
LocalTime time = LocalTime.of(14, 30, 45);  // 14:30:45
int hour = time.getHour();  // 14
int minute = time.getMinute();  // 30
LocalTime nextHour = time.plusHours(1);

3. LocalDateTime (Datum und Uhrzeit)

Beispiel

LocalDateTime ldt = LocalDateTime.now();
LocalDateTime dt = LocalDateTime.of(2023, 6, 15, 14, 30);
LocalDateTime nextMonth = dt.plusMonths(1);

4. ZonedDateTime (Datum und Uhrzeit mit Zeitzone)

Beispiel

ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
ZonedDateTime nyTime = zdt.withZoneSameInstant(ZoneId.of("America/New_York"));
ZoneId zone = zdt.getZone();  // Zeitzone abrufen

5. Instant (Zeitstempel)

Beispiel

Instant now = Instant.now();  // Aktuellen Zeitstempel abrufen
Instant later = now.plusSeconds(60);  // 60 Sekunden später
long epochMilli = now.toEpochMilli();  // Millisekunden-Zeitstempel abrufen

Date-Klasse

Das Paket java.util stellt die Date-Klasse bereit, um das aktuelle Datum und die aktuelle Uhrzeit zu kapseln. Die Date-Klasse stellt zwei Konstruktoren bereit, um Date-Objekte zu instanziieren.

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

Date( )

Der zweite Konstruktor akzeptiert einen Parameter, und zwar die Anzahl der Millisekunden seit dem 1. Januar 1970.

Date(long millisec)

Nachdem ein Date-Objekt erstellt wurde, können die folgenden Methoden aufgerufen werden.

Nein. Methoden und Beschreibung
1 boolean after(Date date)
Gibt true zurück, wenn das Date-Objekt, das diese Methode aufruft, nach dem angegebenen Datum liegt; andernfalls wird false zurückgegeben.
2 boolean before(Date date)
Gibt true zurück, wenn das Date-Objekt, das diese Methode aufruft, vor dem angegebenen Datum liegt; andernfalls wird false zurückgegeben.
3 Object clone( )
Gibt eine Kopie dieses Objekts zurück.
4 int compareTo(Date date)
Vergleicht das Date-Objekt, das diese Methode aufruft, mit dem angegebenen Datum. Gibt 0 zurück, wenn beide gleich sind. Gibt eine negative Zahl zurück, wenn das aufrufende Objekt vor dem angegebenen Datum liegt. Gibt eine positive Zahl zurück, wenn das aufrufende Objekt nach dem angegebenen Datum liegt.
5 int compareTo(Object obj)
Wenn obj vom Typ Date ist, entspricht die Operation compareTo(Date). Andernfalls wird eine ClassCastException ausgelöst.
6 boolean equals(Object date)
Gibt true zurück, wenn das Date-Objekt, das diese Methode aufruft, gleich dem angegebenen Datum ist; andernfalls wird false zurückgegeben.
7 long getTime( )
Gibt die Anzahl der Millisekunden zurück, die von diesem Date-Objekt seit dem 1. Januar 1970, 00:00:00 GMT, repräsentiert werden.
8 int hashCode( )
Gibt den Hashcode-Wert dieses Objekts zurück.
9 void setTime(long time)
 
Legt die Uhrzeit und das Datum anhand der Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT fest.
10 String toString( )
Konvertiert dieses Date-Objekt in einen String der Form: dow mon dd hh:mm:ss zzz yyyy, wobei: dow ein Wochentag ist (Sun, Mon, Tue, Wed, Thu, Fri, Sat).

Aktuelles Datum und aktuelle Uhrzeit abrufen

Das Abrufen des aktuellen Datums und der aktuellen Uhrzeit in Java ist einfach: Verwenden Sie die toString()-Methode des Date-Objekts, um das aktuelle Datum und die aktuelle Uhrzeit auszugeben, wie unten gezeigt:

Beispiel

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date-Objekt initialisieren Date date = new Date(); //Verwenden Sie die Funktion toString(), um Datum und Uhrzeit anzuzeigen System.out.println(date.toString()); } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

Mon May 04 09:51:52 CDT 2013

Date-Vergleich

Java verwendet die folgenden drei Methoden, um zwei Datumsangaben zu vergleichen:

  • Verwenden Sie die Methode getTime(), um zwei Datumsangaben abzurufen (die Anzahl der seit dem 1. Januar 1970 verstrichenen Millisekunden), und vergleichen Sie dann diese beiden Werte.
  • Verwenden Sie die Methoden before(), after() und equals(). Wenn beispielsweise der 12. eines Monats früher als der 18. liegt, dann gibtnew Date(99, 2, 12).before(new Date (99, 2, 18))true zurück.
  • Verwenden Sie die Methode compareTo(), die durch das Comparable-Interface definiert wird und von der Klasse Date implementiert wird.

1. Vergleich mit der Methode getTime()

Diese Methode vergleicht Datumsangaben, indem sie die Anzahl der Millisekunden seit dem 1. Januar 1970 (Unix-Epoche) der Datumsobjekte vergleicht.

Beispiel

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(121, 5, 15); // 15. Juni 2021
        Date date2 = new Date(121, 5, 20); // 20. Juni 2021
       
        // Millisekunden vergleichen
        if (date1.getTime() < date2.getTime()) {
            System.out.println("date1 ist vor date2");
        } else if (date1.getTime() > date2.getTime()) {
            System.out.println("date1 liegt nach date2");
        } else {
            System.out.println("Die beiden Datumswerte sind gleich");
        }
    }
}

Ausgabe:

date1 在 date2 之前

2. Verwenden Sie die Methoden before(), after() und equals()

Diese Methoden sind eingebaute Vergleichsmethoden der Date-Klasse mit klarerer Semantik.

Beispiel

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(121, 5, 15); // 15. Juni 2021
        Date date2 = new Date(121, 5, 20); // 20. Juni 2021
       
        // before()-Methode verwenden
        System.out.println("Liegt date1 vor date2? " + date1.before(date2));
       
        // after()-Methode verwenden
        System.out.println("Liegt date1 nach date2? " + date1.after(date2));
       
        // equals()-Methode verwenden
        System.out.println("Sind die beiden Datumsangaben gleich? " + date1.equals(date2));
    }
}

Ausgabe:

date1 在 date2 之前吗? true
date1 在 date2 之后吗? false
两个日期相同吗? false

3. compareTo()-Methode verwenden

Die Klasse Date implementiert das Comparable-Interface und kann mit der compareTo()-Methode verglichen werden.

Beispiel

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(121, 5, 15); // 15. Juni 2021
        Date date2 = new Date(121, 5, 20); // 20. Juni 2021
       
        int result = date1.compareTo(date2);
       
        if (result < 0) {
            System.out.println("date1 ist vor date2");
        } else if (result > 0) {
            System.out.println("date1 liegt nach date2");
        } else {
            System.out.println("Die beiden Datumswerte sind gleich");
        }
    }
}

Ausgabe:

date1 在 date2 之前

Formatieren von Datumsangaben mit SimpleDateFormat

SimpleDateFormat ist eine Klasse, die Datumsangaben auf localeabhängige Weise formatiert und parst. Mit SimpleDateFormat können Sie ein beliebiges benutzerdefiniertes Datums-/Uhrzeitformat zum Ausführen auswählen. Zum Beispiel:

Beispiel

import java.util.*; import java.text.*; public class DateDemo { public static void main(String[] args) { Date dNow = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); System.out.println("Die aktuelle Uhrzeit ist:" + ft.format(dNow)); } }

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

Diese Codezeile legt das Konvertierungsformat fest, wobei yyyy für das vollständige Jahr, MM für den Monat, dd für den Tag und HH:mm:ss für die Stunde, Minute und Sekunde steht.

Hinweis: Einige Formate sind großgeschrieben und einige kleingeschrieben; zum Beispiel ist MM der Monat, mm die Minuten; HH ist das 24-Stunden-Format, während hh das 12-Stunden-Format ist.

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

当前时间为: 2018-09-06 10:16:34

Formatierungscodes für Datum und Uhrzeit

Die Zeitmuster-Zeichenfolge wird verwendet, um das Zeitformat festzulegen. In diesem Muster sind alle ASCII-Buchstaben als Musterbuchstaben reserviert, die wie folgt definiert sind:

Buchstabe Beschreibung Beispiel
G Epochenmarkierung AD
y Vierstelliges Jahr 2001
M Month Juli oder 07
d Tag des Monats 10
h Stunde im A.M./P.M.-Format (1~12) 12
H Stunde des Tages (0~23) 22
m Minuten 30
s Sekunden 55
S Millisekunden 234
E Wochentag Dienstag
D Tag des Jahres 360
F Wochentag im Monat 2 (zweiter Mittwoch im Juli)
w Woche im Jahr 40
W Woche im Monat 1
a A.M./P.M.-Markierung PM
k Stunde des Tages (1~24) 24
K Stunde im A.M./P.M.-Format (0~11) 10
z Zeitzone Eastern Standard Time
' Texttrennzeichen Trennzeichen
" Einfaches Anführungszeichen `

Formatieren von Datumsangaben mit printf

Die printf-Methode kann Uhrzeit und Datum sehr einfach formatieren. Mit einem aus zwei Buchstaben bestehenden Format beginnt sie mit%t%t und endet mit einem der Buchstaben in der folgenden Tabelle.

  • %tY: Gibt ein vierstelliges Jahr aus, zum Beispiel: 2023
  • %ty: Gibt ein zweistelliges Jahr aus, zum Beispiel: 23
  • %tm: Gibt einen zweistelligen Monat aus, zum Beispiel: 02
  • %tB: Gibt den vollständigen Namen des Monats aus, zum Beispiel: Februar
  • %tb: Gibt die Abkürzung des Monats aus, zum Beispiel: Feb
  • %tA: Gibt den vollständigen Namen des Wochentags aus, zum Beispiel: Mittwoch
  • %ta: Gibt die Abkürzung des Wochentags aus, zum Beispiel: Mi
  • %td: Gibt einen zweistelligen Tag aus, zum Beispiel: 24
  • %te: Gibt einen ein- oder zweistelligen Tag aus, zum Beispiel: 24 oder 02
  • %tH: Gibt die Stunde im 24-Stunden-Format aus, zum Beispiel: 23
  • %tI: Gibt die Stunde im 12-Stunden-Format aus, zum Beispiel: 11
  • %tM: Gibt die Minuten aus, zum Beispiel: 45
  • %tS: Gibt die Sekunden aus, zum Beispiel: 30
  • %tp: Gibt Vormittag oder Nachmittag aus, zum Beispiel: AM oder PM
  • %tZ: Gibt die Zeitzone aus, zum Beispiel: GMT+08:00

Konvertierungszeichen

Beschreibung

Beispiel

%tc

Enthält vollständige Datums- und Zeitinformationen

Saturday October 27 14:21:20 CST 2007

%tF

"Jahr-Monat-Tag"-Format

2007-10-27

%tD

"Monat/Tag/Jahr"-Format

10/27/07

%tr

"HH:MM:SS PM"-Format (12-Stunden-Uhr)

02:25:51 PM

%tT

"HH:MM:SS"-Format (24-Stunden-Uhr)

14:28:16

%tR

"HH:MM"-Format (24-Stunden-Uhr)

14:28

MehrprintfWeitere Beispiele zum Parsen finden Sie unter:Java printf-Beispiele für formatierte Ausgabe

Beispiel

Beispiel

import java.util.Date;
public class DateFormatExample {
   public static void main(String[] args) {
      Date date = new Date();
      System.out.printf("%tY-%tm-%td %tH:%tM:%tS %tZ", date, date, date, date, date, date, date);
   }
}

Die Ausgabe der Ausführung ist:

2023-02-24 13:34:45 GMT+08:00

Beispiel

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date-Objekt initialisieren Date date = new Date(); //Mit c System.out.printf("Vollständige Datums- und Zeitinformationen: %tc%n",date); //Mit f System.out.printf("Jahr-Monat-Tag-Format: %tF%n",date); //Mit d System.out.printf("Monat/Tag/Jahr-Format: %tD%n",date); //Mit r System.out.printf("HH:MM:SS PM-Format (12-Stunden-Uhr): %tr%n",date); //Mit t System.out.printf("HH:MM:SS-Format (24-Stunden-Uhr): %tT%n",date); //Mit R System.out.printf("HH:MM-Format (24-Stunden-Uhr): %tR",date); } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
年-月-日格式:2012-09-10  
月/日/年格式:09/10/12  
HH:MM:SS PM格式(12时制):10:43:36 上午  
HH:MM:SS格式(24时制):10:43:36  
HH:MM格式(24时制):10:43  

Wenn Sie das Datum wiederholt angeben müssen, ist die Formatierung jedes Teils auf diese Weise etwas kompliziert. Daher können Sie eine Formatzeichenfolge verwenden, um den Index des zu formatierenden Arguments anzugeben.

Der Index muss unmittelbar auf%% folgen und mit$$ enden. Zum Beispiel:

Beispiel

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date-Objekt initialisieren Date date = new Date(); //Verwenden von toString() zum Anzeigen von Datum und Uhrzeit System.out.printf("%1$s %2$tB %2$td, %2$tY", "Fälligkeitsdatum:", date); } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

Due date: February 09, 2014

Alternativ können Sie das < Flag verwenden. Es gibt an, dass das zuvor formatierte Argument erneut verwendet werden soll. Zum Beispiel:

Beispiel

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date-Objekt initialisieren Date date = new Date(); //Formatierte Zeit anzeigen System.out.printf("%s %tB %<te, %<tY", "Fälligkeitsdatum:", date); } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

Due date: February 09, 2014

Die Konvertierungszeichen, die Datumsformate definieren, können das angegebene Konvertierungszeichen verwenden, um einen neuen String aus einem Datum zu erzeugen. Diese Datumskonvertierungszeichen sind unten aufgeführt:

Beispiel

import java.util.*; public class DateDemo { public static void main(String[] args) { Date date=new Date(); //Verwenden von b, Monatsabkürzung String str=String.format(Locale.US,"Englische Monatsabkürzung: %tb",date); System.out.println(str); System.out.printf("Lokale Monatsabkürzung: %tb%n",date); //Mit B, vollständiger Monatsname str=String.format(Locale.US,"Englischer vollständiger Monatsname: %tB",date); System.out.println(str); System.out.printf("Lokaler vollständiger Monatsname: %tB%n",date); //Mit a, Wochentagskürzel str=String.format(Locale.US,"Englisches Wochentagskürzel: %ta",date); System.out.println(str); //Mit A, vollständiger Wochentagsname System.out.printf("Lokales Wochentagskürzel: %tA%n",date); //Mit C, erste zwei Ziffern des Jahres System.out.printf("Die ersten beiden Ziffern des Jahres (mit führenden Nullen aufgefüllt, wenn weniger als zwei Ziffern): %tC%n",date); //Mit y, letzte zwei Ziffern des Jahres System.out.printf("Die letzten beiden Ziffern des Jahres (mit führenden Nullen aufgefüllt, wenn weniger als zwei Ziffern): %ty%n",date); //Mit j, Tag des Jahres System.out.printf("Der Tag des Jahres (d. h. der n-te Tag des Jahres): %tj%n",date); //Mit m, Monat System.out.printf("Zweistelliger Monat (mit führender Null, wenn weniger als zwei Ziffern): %tm%n",date); //Mit d, Tag (zwei Ziffern, bei Bedarf mit führender Null) System.out.printf("Zweistelliger Tag (mit führender Null, wenn weniger als zwei Ziffern): %td%n",date); //Mit e, Tag (einstellig ohne führende Null) System.out.printf("Tag des Monats (ohne führende Null): %te",date); } }

Die Ausgabe ist:

英文月份简称:May
本地月份简称:五月
英文月份全称:May
本地月份全称:五月
英文星期的简称:Thu
本地星期的简称:星期四
年的前两位数字(不足两位前面补0):20
年的后两位数字(不足两位前面补0):17
一年中的天数(即年的第几天):124
两位数字的月份(不足两位前面补0):05
两位数字的日(不足两位前面补0):04
月份的日(前面不补0):4

Zeichenfolgen in Zeit parsen

Die Klasse SimpleDateFormat verfügt über einige zusätzliche Methoden, insbesondere parse(), die versucht, eine Zeichenfolge gemäß dem im angegebenen SimpleDateFormat-Objekt gespeicherten Format zu parsen. Zum Beispiel:

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 + " Wird geparst als "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Nicht analysierbar mit " + ft); } } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

Java Sleep

sleep() versetzt den aktuellen Thread in einen suspendierten Zustand (blockiert den aktuellen Thread) und gibt die CPU ab. Der Zweck besteht darin, zu verhindern, dass der aktuelle Thread die vom Prozess erworbenen CPU-Ressourcen monopolisiert, und dadurch anderen Threads etwas Zeit zur Ausführung zu lassen.

Sie können das Programm für eine Millisekunde oder für einen beliebigen Zeitraum bis zur Lebensdauer Ihres Computers schlafen lassen. Zum Beispiel schläft das folgende Programm 3 Sekunden lang:

Beispiel

import java.util.*; public class SleepDemo { public static void main(String[] args) { try { System.out.println(new Date( ) + "\n"); Thread.sleep(1000*3); //3 Sekunden schlafen System.out.println(new Date( ) + "\n"); } catch (Exception e) { System.out.println("Ausnahme aufgetreten!"); } } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

Thu Sep 17 10:20:30 CST 2015

Thu Sep 17 10:20:33 CST 2015

Zeitmessung

Das folgende Beispiel zeigt, wie ein Zeitintervall (in Millisekunden) gemessen wird:

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("Die Differenz ist: " + diff); } catch (Exception e) { System.out.println("Ausnahme aufgetreten!"); } } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

Fri Jan 08 09:48:47 CST 2016

Fri Jan 08 09:48:50 CST 2016

Difference is : 3019

Calendar-Klasse

Wir sind nun in der Lage, ein Datumsobjekt zu formatieren und zu erstellen, aber wie können wir bestimmte Teile der Datumsdaten wie Stunde, Tag oder Minute festlegen und abrufen? Und wie können wir Werte zu diesen Teilen des Datums addieren oder davon subtrahieren? Die Antwort ist, die Calendar-Klasse zu verwenden.

Die Calendar-Klasse ist viel leistungsfähiger als die Date-Klasse, und ihre Implementierung ist auch komplexer als die der Date-Klasse.

Die Calendar-Klasse ist eine abstrakte Klasse. In der Praxis implementiert sie Objekte bestimmter Unterklassen. Der Prozess der Objekterstellung ist für Programmierer transparent; Sie müssen nur die Methode getInstance verwenden, um sie zu erstellen.

Erstellen Sie ein Calendar-Objekt, das das aktuelle Datum des Systems darstellt

Calendar c = Calendar.getInstance();//默认是当前日期

Erstellen Sie ein Calendar-Objekt für ein angegebenes Datum

Um die Calendar-Klasse zur Darstellung eines bestimmten Zeitpunkts zu verwenden, müssen Sie zuerst ein Calendar-Objekt erstellen und dann die Parameter Jahr, Monat und Tag dieses Objekts festlegen.

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Feldtypen von Objekten der Calendar-Klasse

In der Calendar-Klasse werden die folgenden Konstanten verwendet, um unterschiedliche Bedeutungen darzustellen. Tatsächlich übernehmen viele Klassen im JDK diese Idee.

KonstanteBeschreibung
Calendar.YEARJahr
Calendar.MONTHMonth
Calendar.DATEDate
Calendar.DAY_OF_MONTHDate, genau dieselbe Bedeutung wie das Feld oben.
Calendar.HOURStunde im 12-Stunden-Format
Calendar.HOUR_OF_DAYStunde im 24-Stunden-Format
Calendar.MINUTEMinute
Calendar.SECONDsecond
Calendar.DAY_OF_WEEKWochentag

Informationen zum Calendar-Klassenobjekt festlegen

Einstellung festlegen

E.g.:

Calendar c1 = Calendar.getInstance();

Aufruf:

public final void set(int year,int month,int date)
c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

Festlegen mithilfe von Feldtypen

Wenn Sie nur ein bestimmtes Feld festlegen, z. B. den Datumswert, können Sie die folgende set-Methode verwenden:

public void set(int field,int value)

Setzen Sie das durch das Objekt c1 repräsentierte Datum auf den 10.; alle anderen Werte werden neu berechnet.

c1.set(Calendar.DATE,10);

Setze das vom c1-Objekt repräsentierte Jahr auf 2008; alle anderen Werte werden neu berechnet.

c1.set(Calendar.YEAR,2008);

Die Bedeutung von set für andere Feldattribute folgt demselben Muster.

Einstellung hinzufügen

Calendar c1 = Calendar.getInstance();

Addiere 10 zum Datum des c1-Objekts, was bedeutet, dass c1 das Datum 10 Tage später repräsentiert; alle anderen Werte werden neu berechnet.

c1.add(Calendar.DATE, 10);

Subtrahiere 10 vom Datum des c1-Objekts, was bedeutet, dass c1 das Datum 10 Tage früher repräsentiert; alle anderen Werte werden neu berechnet.

c1.add(Calendar.DATE, -10);

Die Bedeutung von add für andere Feldattribute folgt demselben Muster.

Abrufen von Informationen zum Calendar-Klassenobjekt

Calendar c1 = Calendar.getInstance(); //Jahr abrufen int year = c1.get(Calendar.YEAR); //Monat abrufen int month = c1.get(Calendar.MONTH) + 1; //Datum abrufen int date = c1.get(Calendar.DATE); //Stunde abrufen int hour = c1.get(Calendar.HOUR_OF_DAY); //Minute abrufen int minute = c1.get(Calendar.MINUTE); //Sekunde abrufen int second = c1.get(Calendar.SECOND); //Wochentag abrufen (Hinweis: Dies unterscheidet sich von der Klasse Date: 1 steht für Sonntag, 2 steht für Montag, 3 steht für Dienstag und so weiter) int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar-Klasse

Die Klasse Calendar implementiert den gregorianischen Kalender; GregorianCalendar ist eine konkrete Implementierung der Klasse Calendar.

Die Methode getInstance() der Klasse Calendar gibt standardmäßig ein GregorianCalendar-Objekt zurück, das mit der aktuellen Locale und Zeitzone initialisiert wurde. GregorianCalendar definiert zwei Felder: AD und BC. Diese stellen die beiden Epochen dar, die durch den gregorianischen Kalender definiert sind.

Im Folgenden sind mehrere Konstruktoren von GregorianCalendar-Objekten aufgeführt:

Nein. Konstruktor und Beschreibung
1 GregorianCalendar()
Konstruiert einen standardmäßigen GregorianCalendar unter Verwendung der aktuellen Zeit in der Standardzeitzone mit dem Standardgebietsschema.
2 GregorianCalendar(int year, int month, int date)
Konstruiert einen GregorianCalendar mit der angegebenen Datumseinstellung in der Standardzeitzone mit dem Standardgebietsschema.
3 GregorianCalendar(int year, int month, int date, int hour, int minute)
Konstruiert einen GregorianCalendar mit der angegebenen Datums- und Uhrzeiteinstellung für die Standardzeitzone mit dem Standardgebietsschema.
4 GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
Konstruiert einen GregorianCalendar mit der angegebenen Datums- und Uhrzeiteinstellung für die Standardzeitzone mit dem Standardgebietsschema.
5 GregorianCalendar(Locale aLocale)
Konstruiert einen GregorianCalendar basierend auf der aktuellen Zeit in der Standardzeitzone mit dem angegebenen Gebietsschema.
6 GregorianCalendar(TimeZone zone)
Konstruiert einen GregorianCalendar basierend auf der aktuellen Zeit in der angegebenen Zeitzone mit dem Standardgebietsschema.
7 GregorianCalendar(TimeZone zone, Locale aLocale)
Erstellt einen GregorianCalendar basierend auf der aktuellen Zeit in der angegebenen Zeitzone mit dem angegebenen Gebietsschema.

Hier ist eine Liste einiger nützlicher Methoden, die von der Klasse GregorianCalendar bereitgestellt werden:

Nein. Methode und Beschreibung
1 void add(int field, int amount)
Addiert den angegebenen (vorzeichenbehafteten) Zeitbetrag zum angegebenen Kalenderfeld gemäß den Kalenderregeln.
2 protected void computeFields()
Konvertiert den UTC-Millisekundenwert in Zeitfeldwerte.
3 protected void computeTime()
Überschreibt Calendar und konvertiert Zeitfeldwerte in einen UTC-Millisekundenwert.
4 boolean equals(Object obj)
Vergleicht diesen GregorianCalendar mit dem angegebenen Object.
5 int get(int field)
Ruft den Zeitwert für das angegebene Feld ab.
6 int getActualMaximum(int field)
Gibt den maximalen Wert des angegebenen Felds für das aktuelle Datum zurück.
7 int getActualMinimum(int field)
Gibt den minimalen Wert des angegebenen Felds für das aktuelle Datum zurück.
8 int getGreatestMinimum(int field)
Gibt den höchsten Mindestwert des angegebenen Kalenderfelds für diese GregorianCalendar-Instanz zurück.
9 Date getGregorianChange()
Ruft das Datum der gregorianischen Kalenderänderung ab.
10 int getLeastMaximum(int field)
Gibt den niedrigsten Maximalwert des angegebenen Kalenderfelds für diese GregorianCalendar-Instanz zurück.
11 int getMaximum(int field)
Gibt den maximalen Wert des angegebenen Kalenderfelds für diese GregorianCalendar-Instanz zurück.
12 Date getTime()
Ruft die aktuelle Zeit des Kalenders ab.
13 long getTimeInMillis()
Ruft die aktuelle Zeit des Kalenders als long ab.
14 TimeZone getTimeZone()
Ruft die Zeitzone ab.
15 int getMinimum(int field)
Gibt den minimalen Wert des angegebenen Felds zurück.
16 int hashCode()
Überschreibt hashCode.
17 boolean isLeapYear(int year)
Bestimmt, ob das angegebene Jahr ein Schaltjahr ist.
18 void roll(int field, boolean up)
Addiert oder subtrahiert (auf/ab) eine einzelne Zeiteinheit im angegebenen Zeitfeld, ohne größere Felder zu ändern.
19 void set(int field, int value)
Setzt das Zeitfeld auf den angegebenen Wert.
20 void set(int year, int month, int date)
Setzt die Werte für Jahr, Monat und Tag.
21 void set(int year, int month, int date, int hour, int minute)
Setzt die Werte für Jahr, Monat, Tag, Stunde und Minute.
22 void set(int year, int month, int date, int hour, int minute, int second)
Setzt die Werte für Jahr, Monat, Tag, Stunde, Minute und Sekunde.
23 void setGregorianChange(Date date)
Legt das Änderungsdatum des GregorianCalendar fest.
24 void setTime(Date date)
Setzt die aktuelle Zeit des Calendar auf das angegebene Datum.
25 void setTimeInMillis(long millis)
Setzt die aktuelle Zeit des Calendar auf den angegebenen long-Millisekundenwert.
26 void setTimeZone(TimeZone value)
Setzt die aktuelle Zeitzone auf den angegebenen Zeitzonenwert.
27 String toString()
Gibt eine Zeichenfolge zurück, die den Kalender repräsentiert.

Beispiel

Beispiel

import java.util.*; public class GregorianCalendarDemo { public static void main(String[] args) { String months[] = { "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"}; int year; //Gregorianischen Kalender initialisieren //Aktuelle Zeit und Datum verwenden //Standardmäßig lokale Zeit und Zeitzone GregorianCalendar gcalendar = new GregorianCalendar(); //Aktuelle Zeit- und Datumsinformationen anzeigen System.out.print("Datum: "); System.out.print(Monate[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Zeit: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); //Prüfen, ob das aktuelle Jahr ein Schaltjahr ist if(gcalendar.isLeapYear(year)) { System.out.println("Das aktuelle Jahr ist ein Schaltjahr"); } else { System.out.println("Das aktuelle Jahr ist kein Schaltjahr"); } } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

Date: Apr 22 2009
Time: 11:25:27
当前年份不是闰年

Eine vollständige Liste der Calendar-Klasse finden Sie in der Standard-Java-Dokumentation。

Weitere Erweiterungen