Die Anleitung zu Java ChronoUnit
1. ChronoUnit
ChronoUnitist 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
- TemporalField
- TemporalUnit
- ChronoField
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.
- HijrahDate
- MinguoDate
- JapaneseDate
- ThaiBuddhistDate
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
- HijrahDate
- MinguoDate
- JapaneseDate
- ThaiBuddhistDate
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.
- Era
- JapaneseEra
- JapaneseDate
- IsoEra
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)
- Duration
- TemporalField
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.
- ThaiBuddhistDate
- JapaneseDate
- MinguoDate
- HijrahDate
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.
- HijrahDate
- MinguoDate
- JapaneseDate
- ThaiBuddhistDate
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.
- HijrahDate
- MinguoDate
- JapaneseDate
- ThaiBuddhistDate
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
- Temporal
- YearMonth
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
- Temporal
- LocalDateTime
- YearMonth
Die Anleitungen Java Date Time
- Die Anleitung zu Java ZoneId
- Die Anleitung zu Java Temporal
- Die Anleitung zu Java Period
- Die Anleitung zu Java TemporalAdjusters
- Die Anleitung zu Java MinguoDate
- Die Anleitung zu Java TemporalAccessor
- Die Anleitung zu Java JapaneseEra
- Die Anleitung zu Java HijrahDate
- Die Anleitung zu Java Date Time
- Was ist Sommerzeit (DST)?
- Die Anleitung zu Java LocalDate
- Die Anleitung zu Java LocalTime
- Die Anleitung zu Java LocalDateTime
- Die Anleitung zu Java ZonedDateTime
- Die Anleitung zu Java JapaneseDate
- Die Anleitung zu Java Duration
- Die Anleitung zu Java TemporalQuery
- Die Anleitung zu Java TemporalAdjuster
- Die Anleitung zu Java ChronoUnit
- Die Anleitung zu Java TemporalQueries
Show More
- Anleitungen Java Web Services
- Anleitungen Java Servlet/JSP
- Die Anleitungen JavaFX
- Anleitungen Java SWT
- Die Anleitungen Oracle Java ADF
- Java Grundlagen
- Die Anleitungen Java Collections Framework
- Die Anleitungen Java IO
- Die Anleitungen Struts2 Framework
- Anleitungen Spring Boot
- Anleitungen Spring Cloud
- Anleitungen Maven
- Anleitungen Gradle