Welche APIs sind in Java für Datum und Uhrzeit verfügbar?

Ab Java 8 bietet das Paket java.time eine neue Datums- und Uhrzeit-API. Die neue API unterscheidet strikt zwischen Uhrzeit, Ortsdatum und Ortszeit und erleichtert die Durchführung von Datums- und Uhrzeitberechnungen. Die wichtigsten beteiligten Typen sind die folgenden:

LocalDate: Ein Datum, das keine bestimmte Uhrzeit enthält.

LocalTime: Uhrzeit ohne Datum.

LocalDateTime: Enthält Datum und Uhrzeit.

Instant: Stellt einen Zeitstempel dar.

DateTimeFormatter wird zur Zeitformatierung und -analyse verwendet

Dauer: Wird zur Berechnung von zwei „Zeit“-Intervallen verwendet

Zeitraum: Wird zur Berechnung des Intervalls zwischen zwei „Daten“ verwendet.

Die Typen der neuen API sind fast alle invariante Typen (ähnlich der Verwendung von String), die bedenkenlos verwendet werden können, ohne sich Gedanken über Änderungen machen zu müssen. Unter diesen stellen LocalDate, LocalTime und LocalDateTime Datums-, Uhrzeit- und Datum-Uhrzeit-Objekte dar, und Instanzen ihrer Klassen sind unveränderliche Objekte. Alle drei erstellen gemeinsame Objekte und APIs.

Die Art und Weise, das Objekt zu konstruieren, ist wie folgt:

Objekt erstellen

API zum Abrufen von Informationen zu LocalDate, LocalTime und LocalDateTime.

API zum Abrufen von Informationen von LocalDateTime

Ändern Sie zugehörige APIs

LocalDateTime kombiniert die Methoden von LocalDate und LocalTime, daher werden im Folgenden nur LocalDate und LocalTime als Beispiele verwendet. Diese Methoden geben einen neuen Instanzverweis zurück, da LocalDateTime, LocalDate und LocalTime unveränderlich sind.

API ändern

Sofortiger Zeitstempel

JDK8 ist besonders einfach zum Abrufen von Zeitstempeln und verfügt über mehr Funktionen. Die Instant-Klasse verfügt über eine statische Factory-Methode now(), die den aktuellen Zeitstempel zurückgibt.

Instant instant = Instant.now();
System.out.println("当前时间戳是:" + instant);

Date date = Date.from(instant);
System.out.println("当前时间戳是:" + date);

instant = date.toInstant();
System.out.println(instant);

Timestamp enthält Datum und Uhrzeit, was java.util.Date sehr ähnlich ist. Tatsächlich ähnelt Instant dem Date vor JDK8. Die beiden Klassen Instant und Date können konvertiert werden.

DateTimeFormatter

In JDK8 wurde ein neuer Datums- und Zeitformatierer DateTimeFormatter eingeführt. Die Formatmethode kann sowohl positiv als auch negativ genannt werden.

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//2021-03-01T15:09:17.444190900

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = ldt.format(dtf);
System.out.println(ldtStr);//2021-03-01 15:09:17

String ldtStr1 = dtf.format(ldt);
System.out.println(ldtStr1);//2021-03-01 15:09:17

Zeitraum

In Java8 können wir die folgende Klasse verwenden, um die Datumsintervalldifferenz zu berechnen: java.time.Period. Sie wird hauptsächlich durch die Methoden getYears(), getMonths() und getDays() der Period-Klasse berechnet, die nur auf Jahr, Monat und Tag genau sein können. Wird zum Vergleich zwischen LocalDate verwendet.

LocalDate today = LocalDate.now();
System.out.println(today);     // 2021-03-01
LocalDate birthDate = LocalDate.of(1995, 1, 11);
System.out.println(birthDate); // 1995-01-11
Period period = Period.between(birthDate, today);
System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(),
 period.getDays());

Dauer

In Java8 können wir die folgenden Klassen verwenden, um Zeitintervallunterschiede zu berechnen: java.time.Duration, zeitbasierte Werte, Methoden zur Messung der Zeitdauer. Wird für Vergleiche zwischen LocalDateTimes verwendet. Es kann auch zum Vergleich zwischen Instants verwendet werden.

LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);

Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数
System.out.println(duration.toDays());//两个时间差的天数
System.out.println(duration.toHours());//两个时间差的小时数
System.out.println(duration.toMinutes());//两个时间差的分钟数
System.out.println(duration.toMillis());//两个时间差的毫秒数
System.out.println(duration.toNanos());//两个时间差的纳秒数

Die Dauer wird verwendet, um zwei „Zeit“-Intervalle zu berechnen. Mit der Periode wird das Intervall zwischen zwei „Daten“ berechnet.

Java.time.temporal.ChronoUnit

Mit der Klasse ChronoUnit kann ein Zeitraum in einer einzelnen Zeiteinheit gemessen werden. Diese Werkzeugklasse ist die umfassendste und kann zum Vergleich aller Zeiteinheiten verwendet werden.

LocalDateTime today = LocalDateTime.now(); 
System.out.println(today); 
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30); 
System.out.println(birthDate); 

System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); 
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); 
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); 
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); 
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); 
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); 
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); 
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); 
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); 
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); 

System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); 
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); 
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); 
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); 
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));

Supongo que te gusta

Origin blog.csdn.net/Blue92120/article/details/132163947
Recomendado
Clasificación