codestory

Die Anleitung zu Java ChronoUnit

View more Tutorials:

Folge uns auf unserer fanpage, um jedes Mal benachrichtigt zu werden, wenn es neue Artikel gibt. Facebook

1- ChronoUnit

ChronoUnit  ist ein enum, die die Interface TemporalUnit implementiert, die die Standardeinheiten bereitstellt, die in der Java Date Time API verwendet werden. Grundsätzlich sind diese Einheiten ausreichend zu verwenden. Wenn Sie jedoch eine benutzerdefinierte Einheit wünschen, schreiben Sie eine Klasse, die die Interface TemporalUnit implementiert.

public enum ChronoUnit implements TemporalUnit
  • ChronoField
  • TemporalField
  • TemporalUnit
Diese Einheiten werden entworfen um in mehreren Kalendersystemen anwendbar zu sein. Zum Beispiel definieren die meisten "Nicht-ISO"-Kalendersysteme Einheiten von Jahren, Monaten und Tagen, nur mit etwas anderen Regeln. Die Dokumentation jedes Geräts erklärt die Funktionsweise.

2- ChronoUnit Values

Enum Display Name Estimated Duration
NANOS Nanos Duration.ofNanos(1)
MICROS Micros Duration.ofNanos(1000)
MILLIS Millis Duration.ofNanos(1000_000)
SECONDS Seconds Duration.ofSeconds(1)
MINUTES Minutes Duration.ofSeconds(60)
HOURS Hours Duration.ofSeconds(3600)
HALF_DAYS HalfDays Duration.ofSeconds(43200)
DAYS Days Duration.ofSeconds(86400)
WEEKS Weeks Duration.ofSeconds(7 * 86400L)
MONTHS Months Duration.ofSeconds(31556952L / 12)
YEARS Years Duration.ofSeconds(31556952L)
DECADES Decades Duration.ofSeconds(31556952L * 10L)
CENTURIES Centuries Duration.ofSeconds(31556952L * 100L)
MILLENNIA Millennia Duration.ofSeconds(31556952L * 1000L)
ERAS Eras Duration.ofSeconds(31556952L * 1000_000_000L)
FOREVER Forever Duration.ofSeconds(Long.MAX_VALUE, 999_999_999)

3- ChronoUnit methods


public Duration getDuration()   

public boolean isDurationEstimated()  

public boolean isDateBased()  

public boolean isTimeBased()  

public boolean isSupportedBy(Temporal temporal)  

public <R extends Temporal> R addTo(R temporal, long amount)  

public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)

4- CENTURIES

Einheit, die das Konzept eines Jahrhunderts repräsentiert. Für das ISO-Kalendersystem entspricht es 100 Jahren.
Das oben Gesagte gilt auch für die Kalendersysteme Hijrah, Japanese, Minguo und ThaiBuddhist.
When used with other calendar systems it must correspond to an integral number of days and is normally an integral number of years.

5- DAYS

Einheit, die das Konzept eines Tages repräsentiert. Für das ISO-Kalendersystem ist es der Standardtag von Mitternacht bis Mitternacht. Die geschätzte Dauer eines Tages beträgt 24 Stunden.
Das oben Gesagte gilt auch für die Kalendersysteme Hijrah, Japanese, Minguo und ThaiBuddhist.
Bei Verwendung mit anderen Kalendersystemen muss es dem Tag entsprechen, der durch den Auf- und Untergang der Sonne auf der Erde definiert wird. Es ist nicht erforderlich, dass die Tage um Mitternacht beginnen - bei der Umrechnung zwischen Kalendersystemen sollten sie mittags geschnitten werden
Beispiel: Finden Sie die Anzahl der Tage zwischen 2 Zeiträumen.
ChronoUnit_DAYS_ex1.java

LocalDateTime localDateTime1 = LocalDateTime.of(2020, 3, 15, 0, 30, 45);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 3, 17, 13, 30, 45);

Duration duration = Duration.between(localDateTime1, localDateTime2);
System.out.println("duration: " + duration); // PT61H (61 Hours)

long days = ChronoUnit.DAYS.between(localDateTime1, localDateTime2);
System.out.println("days: " + days); // 2
Beispiel: 2 Tage hinzufügen.
ChronoUnit_DAYS_ex2.java

ZonedDateTime now = ZonedDateTime.now();
// Plus 2 days
ZonedDateTime after2Days = now.plus(2, ChronoUnit.DAYS);

System.out.println("Now is: " + now);
System.out.println("After 2 days: " + after2Days);
Output:

Now is: 2021-07-17T00:50:13.048263+06:00[Asia/Bishkek]
After 2 days: 2021-07-19T00:50:13.048263+06:00[Asia/Bishkek]

6- DECADES

Einheit, die das Konzept eines Jahrzehnts repräsentiert. Für das ISO-Kalendersystem beträgt sie 10 Jahre.
Das oben Gesagte gilt auch für die Kalendersysteme Hijrah, Japanese, Minguo und ThaiBuddhist
Bei Verwendung mit anderen Kalendersystemen muss er einer integralen Zahl von Tagen entsprechen und ist normalerweise eine integrale Zahl von Jahren.

7- ERAS

Einheit, die das Konzept einer Ära repräsentiert.
Das ISO-Kalendersystem hat kein Konzept der Ära, daher erscheint es nicht in Zeichenfolgen mit Datums- und Uhrzeitformaten. Die künstlich geschätzte Zeit der Ära in diesem System beträgt 1 Milliarde Jahre.
Calendar system Date Time String
ISO 1989-02-08
Japanese Imperial Calendar Japanese Heisei 1-02-08
Die Ära wird mit der Regierungszeit eines Königs oder der Dauer einer Dynastie in Verbindung gebracht. Das Konzept einer Ära ist im japanischen imperialen Kalendersystem am deutlichsten.
Bei Verwendung mit anderen Kalendersystemen gibt es keine Wertbeschränkung.
ChronoUnit_ERAS_ex1.java

LocalDate isoDate = LocalDate.of(2020, 3, 15);
System.out.printf("isoDate: %s%n%n", isoDate); // 2020-03-15

JapaneseDate japaneseDate = JapaneseDate.from(isoDate);
JapaneseEra era = japaneseDate.getEra();

System.out.printf("japaneseDate: %s%n", japaneseDate); // Japanese Reiwa 2-03-15
System.out.printf(" > era: %s", era); // Reiwa
Output:

isoDate: 2020-03-15

japaneseDate: Japanese Reiwa 2-03-15
 > era: Reiwa

8- FOREVER

Künstliche Einheit, die das Konzept der Ewigkeit repräsentiert. Dies wird hauptsächlich mit TemporalField verwendet, um unbegrenzte Felder wie das Jahr oder die Ära darzustellen. Die geschätzte Dauer dieser Einheit wird künstlich als die größte von Duration unterstützte Dauer definiert.

Duration maxDuration = ChronoUnit.FOREVER.getDuration();
Zum Beispiel:
ChronoUnit_FOREVER_ex1.java

for (final ChronoUnit unit : ChronoUnit.values()) {
    final Duration duration = unit.getDuration();
    System.out.println(unit + ": " + duration + " (" + duration.getSeconds() + " seconds)");
}
Output:

Nanos: PT0.000000001S (0 seconds)
Micros: PT0.000001S (0 seconds)
Millis: PT0.001S (0 seconds)
Seconds: PT1S (1 seconds)
Minutes: PT1M (60 seconds)
Hours: PT1H (3600 seconds)
HalfDays: PT12H (43200 seconds)
Days: PT24H (86400 seconds)
Weeks: PT168H (604800 seconds)
Months: PT730H29M6S (2629746 seconds)
Years: PT8765H49M12S (31556952 seconds)
Decades: PT87658H12M (315569520 seconds)
Centuries: PT876582H (3155695200 seconds)
Millennia: PT8765820H (31556952000 seconds)
Eras: PT8765820000000H (31556952000000000 seconds)
Forever: PT2562047788015215H30M7.999999999S (9223372036854775807 seconds)

9- HALF_DAYS

Einheit, die das Konzept eines halben Tages darstellt, wie es in AM/PM verwendet wird. Für das ISO-Kalendersystem beträgt sie 12 Stunden.
Beispiel: Kürzen Sie den Rest bei der Division durch einen halben Tag von einem LocalDateTime.
ChronoUnit_HALF_DAYS_ex1.java

LocalDateTime localDateTime1 = LocalDateTime.of(2020, 3, 15, 9, 30, 45);
LocalDateTime truncatedLDT1 = localDateTime1.truncatedTo(ChronoUnit.HALF_DAYS);

System.out.printf("localDateTime1: %s%n", localDateTime1); // 2020-03-15T09:30:45
System.out.printf(" > truncated: %s%n%n", truncatedLDT1);  // 2020-03-15T00:00

LocalDateTime localDateTime2 = LocalDateTime.of(2020, 3, 15, 13, 30, 45);
LocalDateTime truncatedLDT2 = localDateTime2.truncatedTo(ChronoUnit.HALF_DAYS);

System.out.printf("localDateTime2: %s%n", localDateTime2); // 2020-03-15T13:30:45
System.out.printf(" > truncated: %s", truncatedLDT2);      // 2020-03-15T12:00
Output:

localDateTime1: 2020-03-15T09:30:45
 > truncated: 2020-03-15T00:00

localDateTime2: 2020-03-15T13:30:45
 > truncated: 2020-03-15T12:00

10- HOURS

Einheit, die das Konzept einer Stunde darstellt. Für das ISO-Kalendersystem beträgt sie 60 Minuten.
Zum Beispiel:
ChronoUnit_HOURS_ex1.java

ZonedDateTime parisNow = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("Now in Paris: " + parisNow);
  
ZonedDateTime parisNowHour = parisNow.truncatedTo(ChronoUnit.HOURS);
System.out.println("Truncated to Hour: " + parisNowHour);
Output:

Now in Paris: 2021-07-17T05:40:15.939515+02:00[Europe/Paris]
Truncated to Hour: 2021-07-17T05:00+02:00[Europe/Paris]

11- MICROS

Einheit, die das Konzept einer Mikrosekunde darstellt. Für das ISO-Kalendersystem entspricht 1 Sekunde 1 Million Mikrosekunden.

12- MILLENNIA

Einheit, die das Konzept eines Jahrtausends repräsentiert. Für das ISO-Kalendersystem entspricht es 1000 Jahren.
Das oben Gesagte gilt auch für die Kalendersysteme Hijrah, Japanese, Minguo und ThaiBuddhist.
Bei Verwendung mit anderen Kalendersystemen muss er einer integralen Zahl von Tagen entsprechen und ist normalerweise eine integrale Zahl von Jahren.

13- MILLIS

Einheit, die das Konzept einer Millisekunde darstellt. Für das ISO-Kalendersystem entspricht 1 Sekunde 1000 Millisekunden

14- MINUTES

Einheit, die das Konzept einer Minute darstellt. Für das ISO-Kalendersystem beträgt sie 60 Sekunden.

15- MONTHS

Einheit, die das Konzept eines Monats darstellt. Beim ISO-Kalendersystem variiert die Länge des Monats je nach Monat des Jahres. Die geschätzte Dauer eines Monats beträgt ein Zwölftel von 365,2425 Tagen
Bei Verwendung mit anderen Kalendersystemen muss sie einer integralen Zahl von Tagen entsprechen.

16- NANOS

Einheit, die das Konzept einer Nanosekunde repräsentiert, der kleinsten unterstützten Zeiteinheit. Für das ISO-Kalendersystem entspricht 1 Sekunde 1 Milliarde Nanosekunden.

17- SECONDS

Einheit, die das Konzept einer Sekunde repräsentiert. Für das ISO-Kalendersystem entspricht es der Sekunde im SI-Einheitensystem, mit Ausnahme einer Schaltsekunde.

18- WEEKS

Einheit, die das Konzept einer Woche darstellt. Für das ISO-Kalendersystem beträgt sie 7 Tage.
Das oben Gesagte gilt auch für die Kalendersysteme Hijrah, Japanese, Minguo und ThaiBuddhist.
Bei Verwendung mit anderen Kalendersystemen muss sie einer integralen Zahl von Tagen entsprechen.

19- YEARS

Einheit, die das Konzept eines Jahres darstellt. Für das ISO-Kalendersystem beträgt sie 12 Monate. Die geschätzte Dauer eines Jahres beträgt 365,2425 Tage.
Ein Jahr in den Kalendersystemen Hijrah, Japanese, Minguo und ThaiBuddhist entspricht ebenfalls 12 Monaten.
Wenn es mit anderen Kalendersystemen verwendet wird, muss es einer ganzen Zahl von Tagen oder Monaten entsprechen, die ungefähr einem Jahr entsprechen, das durch den Umlauf der Erde um die Sonne definiert wird.

20- getDuration()

Gibt die geschätzte Dauer dieser Einheit im ISO-Kalendersystem zurück.

public Duration getDuration()  
Alle Einheiten dieser Klasse haben eine geschätzte Laufzeit. Die Tage variieren aufgrund der "Daylight Saving Time" (DST), während die Monate unterschiedlich lang sind.
Beispiel: Ein Monat wird auf 30 Tage geschätzt, in Stunden jedoch auf 730 ( entspricht 30,41 Tage).
ChronoUnit_getDuration_ex1.java

Duration monthDuration = ChronoUnit.MONTHS.getDuration();  
// to days: 30 days
System.out.println("monthDuration.toDays(): " + monthDuration.toDays());  

// to hours: 730 hours ~ 30.41 days.
System.out.println("monthDuration.toHours(): " + monthDuration.toHours());
Output:

monthDuration.toDays(): 30
monthDuration.toHours(): 730
Beispiel: Schätzen Sie die Anzahl der Stunden in "1 Jahr 2 Monate 15 Tage".
ChronoUnit_getDuration_ex2.java

Period period = Period.of(1, 2, 15); // 1 year 2 months 15 days.

int years = period.getYears(); // 1
int months = period.getMonths(); // 2
int days = period.getDays(); // 15

System.out.println("years: " + years); // 1
System.out.println("months: " + months);// 2
System.out.println("days: " + days); // 15

Duration yearsDuration = ChronoUnit.YEARS.getDuration().multipliedBy(years);
Duration monthsDuration = ChronoUnit.MONTHS.getDuration().multipliedBy(months);
Duration daysDuration = ChronoUnit.DAYS.getDuration().multipliedBy(days);

Duration totalDuration = yearsDuration.plus(monthsDuration).plus(daysDuration);

long estimatedDays = totalDuration.toDays();
long estimatedHours = totalDuration.toHours();
System.out.println("Estimated days: " + estimatedDays); // 441 days
System.out.println("Estimated hours: " + estimatedHours); // 10586 hours ~ 441.08 days.
Output:

years: 1
months: 2
days: 15
Estimated days: 441
Estimated hours: 10586

21- isDurationEstimated()

Überprüft, ob die Dauer der Einheit eine Schätzung ist.

public boolean isDurationEstimated()  
Alle Zeiteinheiten dieser Klasse gelten als genau, während alle Datumseinheiten dieser Klasse als geschätzt gelten. Weitere Informationen zu den Methoden is TimeBased() und isDateBased().

Diese Definition ignoriert Schaltsekunden, berücksichtigt jedoch, dass Tage aufgrund der Sommerzeit variieren und Monate unterschiedlich lang sind.
Beispiel: Drucken Sie eine Liste der Genauigkeitseinheiten dieser Klasse.
ChronoUnit_isDurationEstimated_ex1.java

for (ChronoUnit unit : ChronoUnit.values()) {
    if (unit.isDurationEstimated()) {
        System.out.println(unit.name());
    }
}
Output:

DAYS
WEEKS
MONTHS
YEARS
DECADES
CENTURIES
MILLENNIA
ERAS
FOREVER

22- isDateBased()

Überprüfen Sie, ob dieses Gerät datumsbasiert ist.

public boolean isDateBased()  
Alle Einheiten von DAYS bis ERAS geben true zurück. Zeitbasierte Einheiten und FOREVER geben false zurück.
ChronoUnit_isDateBased_ex1.java

for (ChronoUnit unit : ChronoUnit.values()) {
    if (unit.isDateBased()) {
        System.out.println(unit.name());
    }
}
Output:

DAYS
WEEKS
MONTHS
YEARS
DECADES
CENTURIES
MILLENNIA
ERAS

23- isTimeBased()

Überprüfen Sie, ob diese Einheit zeitbasiert ist.

public boolean isTimeBased()  
Alle Einheiten von NANOS bis HALF_DAYS geben true zurück. Datumsbasierte Einheiten und FOREVER geben false zurück.
ChronoUnit_isTimeBased_ex1.java

for (ChronoUnit unit : ChronoUnit.values()) {
    if (unit.isTimeBased()) {
        System.out.println(unit.name());
    }
}
Output:

NANOS
MICROS
MILLIS
SECONDS
MINUTES
HOURS
HALF_DAYS

24- isSupportedBy(Temporal)

Überprüft, ob diese Einheit vom angegebenen Temporal-Objekt unterstützt wird.

public boolean isSupportedBy(Temporal temporal)  
Beispiel: Von LocalDate unterstützte Einheiten suchen:
ChronoUnit_isSupportedBy_ex1.java

Temporal localDate = LocalDate.now();
System.out.println("Does LocalDate support: ");

for(ChronoUnit unit: ChronoUnit.values()) {
    System.out.println(unit.name() + "? " + unit.isSupportedBy(localDate));  
}
Output:

Does LocalDate support:
NANOS? false
MICROS? false
MILLIS? false
SECONDS? false
MINUTES? false
HOURS? false
HALF_DAYS? false
DAYS? true
WEEKS? true
MONTHS? true
YEARS? true
DECADES? true
CENTURIES? true
MILLENNIA? true
ERAS? true
FOREVER? false

25- addTo(R temporal, long amount)

Gibt eine Kopie des angegebenen Temporal-Objekts mit dem angegebenen hinzugefügten Zeitraum zurück.

public <R extends Temporal> R addTo(R temporal, long amount)  
Diese Methode entspricht der Methode Temporal.plus​(long,TemporalUnit). Dieser Ansatz wird empfohlen.

// Defined in Temporal interface
public Temporal plus​(long amountToAdd, TemporalUnit unit)
Zum Beispiel:
ChronoUnit_addTo_ex1.java

Temporal ym = YearMonth.of(2020, 3); // 2020-03
// Add 10 monthds to ym.
YearMonth ym2 = (YearMonth) ChronoUnit.MONTHS.addTo(ym, 10);

System.out.println("ym2: " + ym2); // 2021-01

26- between(Temporal, Temporal)

Gibt die Zeitspanne zwischen zwei Temporal-Objekten zurück. Diese Einheit muss von beiden Temporal-Objekten unterstützt werden, andernfalls wird eine Ausnahme ausgelöst.

public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)
Diese Methode entspricht der Verwendung der Methode Temporal.until(Temporal,TemporalUnit).

// Defined in Temporal interface
public long until​(Temporal endExclusive, TemporalUnit unit)
Zum Beispiel:
ChronoUnit_between_ex1.java

LocalDate from = LocalDate.of(2020, 3, 15);
LocalDate to = LocalDate.of(2020, 3, 17);

long days = ChronoUnit.DAYS.between(from, to);
System.out.println("days: " + days); // 2
Zum Beispiel:
ChronoUnit_between_ex2.java

YearMonth from = YearMonth.of(2020, 7);
LocalDateTime to = LocalDateTime.of(2021, 3, 17, 13, 45, 30);

long months = ChronoUnit.MONTHS.between(from, to);
System.out.println("months: " + months); // 8

View more Tutorials:

Vielleicht bist du interessiert

Das sind die Online-Courses außer der Website o7planning, die wir empfehlen. Sie können umsonst sein oder Discount haben.