Zusätzlich zu Lambda -Ausdrücken, Streams und mehreren geringfügigen Verbesserungen führte Java 8 in diesem Tutorial eine neue Reihe von Zeit- und Datums -APIs vor. Javas Verarbeitung von Daten, Kalendern und Zeit wurde immer kritisiert, insbesondere seine Entscheidung, Java.util.date als modifizierbar zu definieren und SimpledateFormat als nicht-thread-safe zu implementieren. Es scheint, dass Java erkannt hat, dass es eine bessere Unterstützung für die Zeit- und Datumsfunktionalität bietet, was auch für Gemeinden, die es gewohnt sind, die Joda -Zeit- und -datumbibliothek zu verwenden, eine gute Sache ist. Der größte Vorteil dieser neuen Zeit- und Datumsbibliothek besteht darin, dass einige Konzepte im Zusammenhang mit Uhrzeit und Datum eindeutig definiert werden, z. -zone) und Zeitraum (Periode). Es stützt sich auch auf einige der Vorteile der Joda -Bibliothek, z. B. das Verständnis von Zeit und Datum zwischen Menschen und Maschinen. Java 8 verwendet immer noch das Kalendersystem von ISO, und im Gegensatz zu seinen Vorgängern sind die Klassen im Java-Zeit-Paket unveränderlich und thread-sicher. Die neue Zeit- und Datums -API befindet sich im Java -Paket.
1.Iminstant-It stellt eine Zeitstempel dar
2. LOCALDATE-ZATEI, der nicht die spezifische Zeit enthält, wie z. B. 2014-01-14. Es kann verwendet werden, um Geburtstage, Jubiläum, Induktionstermine und vieles mehr zu speichern.
3. Lokalzeit - es repräsentiert eine Zeit ohne Daten
4.Localdatetime-it enthält Datum und Uhrzeit, aber es gibt immer noch keine Offset-Informationen oder Zeitzone.
5.zonedDatetime - Dies ist ein vollständiges Datum und eine komplette Uhrzeit, die die Zeitzone enthält, und der Offset basiert auf der UTC/Greenwich -Zeit.
Die neue Bibliothek fügt auch ZoneOffset und Zonen hinzu, was eine bessere Unterstützung für Zeitzonen bieten kann. Mit dem neuen DateTimeFormatter sind auch die Parsen und Formatierung von Daten neu geworden. Ich habe diesen Artikel nur erwähnt, ich habe diesen Artikel geschrieben, als Java zu diesem Zeitpunkt letztes Jahr diese neue Funktion starten wollte. Sie werden also feststellen, dass die Zeit in den Beispielen noch aus dem letzten Jahr stammt. Wenn Sie diese Beispiele ausführen, sind die Werte, die sie zurückgeben, definitiv korrekt.
Wie geht Java 8 mit Zeit und Datum um?
Jemand hat mich gefragt, was der beste Weg ist, eine neue Bibliothek zu lernen? Meine Antwort ist, dass es in den tatsächlichen Projekten verwendet wird. In einem realen Projekt wird es eine Vielzahl von Anforderungen geben, die Entwickler dazu veranlassen, diese neue Bibliothek zu erforschen und zu erforschen. Kurz gesagt, nur die Aufgabe selbst wird Sie wirklich ermutigen, zu erkunden und zu lernen. Gleiches gilt für das neue Datum und die Uhrzeit -API von Java 8. Um diese neue Bibliothek von Java 8 zu lernen, habe ich hier 20 aufgabenorientierte Beispiele erstellt. Beginnen wir mit einer einfachen Aufgabe, z. B. wie die Java 8 -Zeit- und Datumsbibliothek heute verwendet werden soll, und generieren Sie dann weiter ein vollständiges Datum mit Zeit- und Zeitzone Ein Erinnerungsantrag, um herauszufinden, wie viele Tage es vor bestimmten Daten wie Geburtstagen, Sonntag Jubiläum, nächster Rechnungstag, nächster Premium -Tag oder Ablaufdatum für Kreditkarten zu geben sein soll.
Beispiel 1 Wie man das Datum des Tages in Java 8 bekommt
Es gibt eine Klasse in Java 8 namens LocalDate, die verwendet werden kann, um das heutige Datum darzustellen. Diese Klasse unterscheidet sich geringfügig von java.util.date, da sie nur Daten und keine Zeit enthält. Wenn Sie also nur das Datum ohne Einbeziehung der Zeit darstellen müssen, können Sie ihn verwenden.
Die Codekopie lautet wie folgt:
LocalDate Today = LocalDate.Now ();
Ausgabe
Heute lokaler Datum: 2014-01-14
Sie können sehen, dass es das heutige Datum ohne Zeitinformationen erstellt. Es formatiert auch das Datum und gibt es dann aus.
Beispiel 2 So erhalten Sie das aktuelle Jahr, den Monat, den Tag in Java 8
Die LocalDate -Klasse bietet einige bequeme Methoden zum Extrahieren von Jahr, Monat, Tag und anderen Datumattributen. Mit diesen Methoden können Sie alle Datumsattribute erhalten, die Sie benötigen, ohne Klassen wie java.util.calendar zu verwenden:
Die Codekopie lautet wie folgt:
LocalDate heute = localDate.now ();
int Jahr = heute.Getyear ();
int monon = Today.GetMonthValue ();
int day = Today.Getayofmonth ();
System.out.printf ("Jahr: %d Monat: %D Tag: %d /t %n", Jahr, Monat, Tag);
Ausgabe
Heute lokaler Datum: 2014-01-14
Jahr: 2014 Monat: 1 Tag: 14
Wie Sie sehen können, ist es sehr einfach, Jahres- und Monatsinformationen in Java 8 zu erhalten. Verwenden Sie einfach die entsprechende Getter -Methode ohne Speicher, und es ist sehr intuitiv. Sie können es mit der alten Schreibmethode vergleichen, um das laufende Jahr, Monat und Tag in Java zu erhalten.
Beispiel 3 So erhalten Sie ein bestimmtes Datum in Java 8
Im ersten Beispiel sehen wir, dass es sehr einfach ist, das Datum des Tages durch die statische Methode zu generieren (), aber durch eine andere sehr nützliche Fabrikmethode LocalDate.of () können Sie ein beliebiges Datum erstellen, das den Parameter akzeptiert von Jahr, Monat und Tag und kehrt dann eine gleichwertige lokale Instanz zurück. Es gibt eine weitere gute Nachricht über diese Methode, dass sie in der vorherigen API keine Fehler gemacht hat. Das Jahr kann erst 1900 beginnen, der Monat muss bei 0 beginnen. Was auch immer Sie über das Datum hier schreiben, ist beispielsweise im folgenden Beispiel am 14. Januar und es gibt keine versteckte Logik.
Die Codekopie lautet wie folgt:
LocalDate Datum vonBirth = localDate.of (2010, 01, 14);
System.out.println ("Ihr Geburtsdatum ist:" + DateofBirth);
Ausgabe: Ihr Geburtsdatum ist: 2010-01-14
Es ist ersichtlich, dass das Datum der Schöpfung das ist, was wir am 14. Januar 2014 geschrieben haben.
Beispiel 4 So überprüfen Sie, ob zwei Daten in Java 8 gleich sind
Wenn Sie über die tatsächliche Aufgabe der Verarbeitung von Zeit und Datum in der Realität sprechen, besteht eine gemeinsame Sache darin, zu überprüfen, ob die beiden Daten gleich sind. Sie können oft auf Fragen stellen, ob heute ein besonderer Tag wie Geburtstag, Jubiläum oder Feiertage ist. Manchmal erhalten Sie ein Datum, um zu überprüfen, ob es sich beispielsweise um einen bestimmten Tag handelt. Das folgende Beispiel hilft Ihnen dabei, diese Art von Aufgabe in Java 8 zu erledigen. Wie Sie vielleicht denken, überschreibt LocalDate die Equals -Methode, um Daten wie folgt zu vergleichen:
Die Codekopie lautet wie folgt:
LocalDate Datum1 = localDate.of (2014, 01, 14);
System.out.printf ("Heute %S und Datum1 %S sind gleichdatum %n", heute, Datum1);
}
Ausgabe
Heute 2014-01-14 und Datum1 2014-01-14 sind das gleiche Datum
In diesem Fall sind die beiden Vergleichsdaten gleich. Wenn Sie gleichzeitig eine formatierte Datumszeichenfolge in den Code erhalten, müssen Sie sie in ein Datum analysieren, bevor Sie sie vergleichen können. Sie können dieses Beispiel mit der Art und Weise vergleichen, wie Java vorher vergleicht, und Sie werden feststellen, dass es so aufregend ist.
Beispiel 5 So überprüfen Sie nach doppelten Ereignissen in Java 8, sagen Sie Geburtstag
In Java gibt es eine weitere praktische Aufgabe in Bezug auf Uhrzeit und Datum, bei der doppelte Veranstaltungen wie monatliche Abrechnungs Tage, Hochzeitstag, monatliche Rückzahlungstage oder der Tag, an dem Sie jedes Jahr Versicherungsprämien zahlen, überprüfen sollen. Wenn Sie in einem E-Commerce-Unternehmen arbeiten, wird es auf jeden Fall ein Modul geben, das den Benutzern Geburtstagswünsche sendet Festival. Wie kann ich feststellen, ob es sich um ein Festival oder ein doppelter Ereignis in Java handelt? Verwenden Sie die Monatsklasse. Diese Klasse besteht aus Monat und Tag und enthält keine Jahresinformationen. Dies bedeutet, dass Sie sie verwenden können, um einige Tage zu repräsentieren, die jedes Jahr wiederholt erscheinen. Natürlich gibt es einige andere Kombinationen, wie die Klasse des Jahresmonth. Es ist auch unveränderlich und fadensicher wie andere Klassen in der neuen Zeit- und Datumsbibliothek und auch eine Wertklasse. Lassen Sie uns ein Beispiel verwenden, um zu sehen, wie Sie mit Monatstag ein doppeltes Datum überprüfen können:
Die Codekopie lautet wie folgt:
LocalDate Datum vonBirth = localDate.of (2010, 01, 14);
Mononayday birthday = mononday
Monattags currentmonthday = mononayday.from (heute);
if (currentMonthday.equals (Geburtstag)) {
System.out.println ("Viele, viele glückliche Rückkehr des Tages !!");
}anders{
System.out.println ("Entschuldigung, heute ist nicht Ihr Geburtstag");
}
Ausgabe: Viele, viele glückliche Renditen des Tages !!
Obwohl die Jahre unterschiedlich sind, ist heute der Geburtstag, also werden Sie einen Geburtstagswunsch in der Ausgabe sehen. Sie können die Systemzeit anpassen und das Programm ausführen, um festzustellen, ob Sie an Ihrem nächsten Geburtstag erinnert.
Beispiel 6 So erhalten Sie die aktuelle Zeit in Java 8
Dies ist sehr ähnlich zu dem aktuellen Datum im ersten Beispiel. Dieses Mal verwenden wir eine Klasse namens LocalTime, die eine Zeit ohne Datum ist und ein enger Verwandter zu LocalDate ist. Hier können Sie jetzt auch die statische Fabrikmethode verwenden (), um die aktuelle Zeit zu erhalten. Das Standardformat lautet HH: MM: SS: NNN, wobei NNN Nanosekunden ist. Sie können es mit der aktuellen Zeit in Java 8 vergleichen.
Die Codekopie lautet wie folgt:
LocalTime Time = LocalTime.Now ();
Ausgabe
Ortszeit jetzt: 16: 33: 33,369 // in Stunde, Minuten, Sekunden, Nano Sekunden
Wie Sie sehen können, enthält die aktuelle Zeit keine Daten, da die Lokalzeit nur Zeit und keine Daten hat.
Beispiel 7 So erhöhen Sie die Anzahl der Stunden in der Zeit
Oft müssen wir Stunden, Minuten oder Sekunden hinzufügen, um die zukünftige Zeit zu berechnen. Java 8 bietet nicht nur unveränderliche und fadensichere Klassen, sondern bietet auch einige bequemere Methoden wie PluShours (), um die ursprüngliche add () -Methode zu ersetzen. Übrigens geben diese Methoden einen Verweis auf eine neue lokale Zeitinstanz zurück, da die lokale Zeit unveränderlich ist. Vergessen Sie nicht, diese neue Referenz zu speichern.
Die Codekopie lautet wie folgt:
LocalTime Time = LocalTime.Now ();
LocalTime Newtime = Time.pluShours (2);
System.out.println ("Zeit nach 2 Stunden:" + Newtime);
Ausgabe:
Zeit nach 2 Stunden: 18: 33: 33,369
Sie können sehen, dass die aktuelle Zeit nach 2 Stunden 16: 33: 33,369 beträgt. Jetzt können Sie es mit der alten Methode zum Hinzufügen oder Abnahme von Stunden in Java vergleichen. Sie können erkennen, welche Methode auf den ersten Blick besser ist.
Beispiel 8 So erhalten Sie nach 1 Woche ein Datum
Dies ähnelt dem vorherigen Beispiel, um die Zeit nach 2 Stunden zu bekommen. Hier lernen wir, wie Sie das Datum nach 1 Woche erhalten. LocalDate wird verwendet, um Daten ohne Zeit zu repräsentieren. Da LocalDate ebenfalls unveränderlich ist, gibt jeder Änderungsvorgang eine neue Instanz zurück. Vergessen Sie also nicht, sie zu speichern.
Die Codekopie lautet wie folgt:
LocalDate Nextweek = Today.plus (1, Chronounit.Weeks);
System.out.println ("Heute ist:" + heute);
System.out.println ("Datum nach 1 Woche:" + nächste Woche);
Ausgabe:
Heute ist: 2014-01-14
Datum nach 1 Woche: 2014-01-21
Sie können sehen, wie das Datum in 7 Tagen sein wird, das heißt eine Woche. Sie können diese Methode verwenden, um einen Monat, ein Jahr, eine Stunde, Minute oder sogar zehn Jahre hinzufügen und sich die Chronounit -Klasse in der Java -API ansehen, um weitere Optionen zu erhalten.
Beispiel 9 Datum etwa ein Jahr
Dies ist eine Fortsetzung des vorherigen Beispiels. Im obigen Beispiel haben wir gelernt, wie man die localDate plus () -Methode verwendet, um ein Datum, eine Woche oder einen Monat zu einem Datum hinzuzufügen.
Die Codekopie lautet wie folgt:
LocalDate Pothyear = Today.minus (1, chronounit.years);
System.out.println ("Datum vor 1 Jahr:" + vorheriger Jahr);
Localdate nextyear = heute.plus (1, Jahre);
System.out.println ("Datum nach 1 Jahr:" + nextyear);
Ausgabe:
Datum vor 1 Jahr: 2013-01-14
Datum nach 1 Jahr: 2015-01-14
Es ist zu sehen, dass es jetzt zwei Jahre, eine im Jahr 2013, die andere im Jahr 2015 und die Jahre 2014 gibt.
Beispiel 10 Verwenden der Uhr in Java 8
Java 8 wird mit einer Uhrklasse geliefert, mit der Sie die aktuelle Zeit, Datum oder Uhrzeit in einer bestimmten Zeitzone erhalten können. Die Uhr kann anstelle von System.CurrentTimeInmillis () und TimeZone.getDefault () verwendet werden.
Die Codekopie lautet wie folgt:
// Gibt die aktuelle Zeit basierend auf Ihrer Systemuhr zurück und auf UTC eingestellt.
Clock clock = clock.SystemUtc ();
System.out.println ("Uhr:" + Uhr);
// gibt die Zeit basierend auf System Taktzone Takt -StandardClock = zurück
Clock.SystemDefaultZone ();
System.out.println ("Uhr:" + Uhr);
Ausgabe:
Uhr: Systemclock [Z]
Uhr: Systemclock [Z]
Sie können diese Uhr mit dem angegebenen Datum vergleichen, z. B.:
Die Codekopie lautet wie folgt:
öffentliche Klasse Myclass {
private Uhr Uhr;
public void Process (LocalDate EventDate) {
if (eventDate.isBefore (localdate.now (Uhr)) {
...
}
}
}
Dies ist ziemlich bequem, wenn Sie Daten in verschiedenen Zeitzonen verarbeiten müssen.
Beispiel 11 So bestimmen Sie, ob ein Datum vor oder nach einem anderen Datum in Java liegt
Dies ist auch eine häufige Aufgabe in den tatsächlichen Projekten. Wie stellen Sie fest, ob ein Datum vor oder nach einem anderen Datum oder genau gleich ist? In Java 8 hat die LocalDate -Klasse eine isbefore ()- und isafter () -Methode, mit der zwei Daten verglichen werden können. Wenn das Datum des Aufrufens der Methode früher als das angegebene Datum ist, gibt die Methode isbefore () true zurück.
Die Codekopie lautet wie folgt:
Localdate morM morgen = localdate.of (2014, 1, 15);
System.out.println ("morgen kommt nach heute");
}
Localdate gestern = heute.minus (1, Tage);
if (gestern.isbefore (heute)) {
System.out.println ("gestern ist Tag vor heute");
}
Ausgabe:
Morgen kommt nach heute
Gestern ist Tag vor heute
Es ist ersichtlich, dass das Datum in Java 8 recht einfach ist. Es besteht keine Notwendigkeit, eine andere Klasse wie Kalender zu verwenden, um ähnliche Aufgaben zu erledigen.
Beispiel 12 Umgang mit verschiedenen Zeitzonen in Java 8
Java 8 trennt nicht nur Daten und Zeiten, sondern hat auch eine Zeitzone. Es gibt jetzt mehrere Sätze von Zeitzonenklassen. Es entspricht der Gregoriancalendar -Klasse vor Java 8. Mit dieser Klasse können Sie die lokale Zeit in die entsprechende Zeit in einer anderen Zeitzone umwandeln, z. B. das folgende Beispiel:
Die Codekopie lautet wie folgt:
// Datum und Uhrzeit mit TimeZone in Java 8 ZoneId America = zoneId.of ("America/new_york");
LocalDatetime localTDateAndTime = localDatetime.now ();
ZonedDatetime dateindtimeInNeWYork = zonedDatetime.of (LocalTDateAndTime, Amerika);
System.out.println ("Aktuelles Datum und Uhrzeit in einer bestimmten Zeitzone:" + DATEANDTimeInNewYork);
Ausgabe:
Aktuelles Datum und Uhrzeit in einer bestimmten Zeitzone: 2014-01-14T16: 33: 33.373-05: 00 [America/New_york]
Sie können es mit der vorherigen Methode zur Konvertierung der lokalen Zeit in die GMT -Zeit vergleichen. Machen Sie den Text, der der Zeitzone entspricht, übrigens, wie vor Java 8, ansonsten nicht zu einer solchen Ausnahme:
Die Codekopie lautet wie folgt:
Ausnahme im Thread "Haupt" java.time.zone.zonerulesexception: Unbekannte Zeitzone-ID: Asien/Tokio
bei java.time.zone.zonerulesprovider.getProvider (ZonerulesProvider.java:272)
bei java.time.zone.zonerulesprovider.getRULES (ZonerulesProvider.java:227)
bei java.time.zoneregion.ofid (Zoneregion.java:120)
bei java.time.zoneid.of (zoneId.java:403)
bei java.time.zoneid.of (zoneId.java:351)
Beispiel 13 Wie man einen festen Datum darstellt, z. B. Ablaufzeit für Kreditkarten
So wie der Monat einen wiederkehrenden Tag darstellt, ist ein Jahrmonat eine weitere Kombination, die Daten wie Kreditkartenrückzahlungsdatum, Datum der Festzahlung und Fälligkeitsdatum der Optionen darstellt. Sie können diese Klasse verwenden, um herauszufinden, wie viele Tage in diesem Monat vorhanden sind.
Die Codekopie lautet wie folgt:
Jahrmonth Currentyearmonth = Jahrmonth.Now ();
Jahrmonth CreditCardexpiry = Jahrmonth.of (2018, Monat.February);
System.out.printf ("Ihre Kreditkarte ist auf %s %n", CreditCdexpiry);
Ausgabe:
Tage im Monat Jahr 2014-01: 31
Ihre Kreditkarte läuft am 2018-02 ab
Beispiel 14 Wie man das Schaltjahr in Java 8 überprüft
Dies ist nicht kompliziert. Wenn Sie das Rad immer noch neu erstellen möchten, können Sie sich diesen Code ansehen.
Die Codekopie lautet wie folgt:
if (Today.isleaPyear ()) {
System.out.println ("Dieses Jahr ist Schaltjahr");
}anders {
System.out.println ("2014 ist kein Schaltjahr");
}
Ausgabe: 2014 ist kein Schaltjahr
Sie können noch einige Jahre überprüfen, um festzustellen, ob die Ergebnisse korrekt sind.
Beispiel 15 Wie viele Tage und Monate sind zwischen zwei Daten enthalten
Eine weitere häufige Aufgabe besteht darin, zu berechnen, wie viele Tage, Wochen oder Jahre zwischen zwei angegebenen Daten enthalten sind. Sie können die Klasse java.time.period verwenden, um diese Funktion zu erfüllen. Im folgenden Beispiel werden wir berechnen, wie viele Monate das aktuelle Datum von einem zukünftigen Datum getrennt ist.
Die Codekopie lautet wie folgt:
Localdate java8release = localDate.of (2014, Monat.March, 14);
PeriiendialeTonextjavarelease =
Periode.
System.out.println ("Monate zwischen heute und Java 8 veröffentlicht:" + PeriodTonextjavarelease.getmonths ());
Ausgabe:
Monate Zeit zwischen heute und Java 8 Veröffentlichung: 2
Wie Sie sehen können, ist dieser Monat Januar und der Veröffentlichungsdatum von Java 8 ist März, so dass 2 Monate zwischen ihnen liegen.
Beispiel 16 Datum und Uhrzeit mit Zeitzonenversatz
In Java 8 können Sie die ZoneOffset -Klasse verwenden, um eine bestimmte Zeitzone darzustellen, z. Solange Sie diesen Offset erhalten, können Sie LocalDatetime und diesen Offset verwenden, um eine OffsetDatetime zu erstellen.
Die Codekopie lautet wie folgt:
LocalDatetime DateTime = localDateTime.of (2014, Monat. Januar, 14, 19, 30);
ZoneOffset offset = zoneOffset.of ("+05:30");
OffSetDatetime Datum = OffSetDatetime.of (DateTime, Offset);
System.out.println ("Datum und Uhrzeit mit TimeZone -Offset in Java:" + Datum);
Ausgabe:
Datum und Uhrzeit mit TimeZone Offset in Java: 2014-01-14t19: 30+05: 30
Sie können sehen, dass die aktuelle Zeit und das aktuelle Datum mit der Zeitzone zusammenhängen. Ein weiterer Punkt ist, dass OffsetDatetime hauptsächlich für Maschinen zu verstehen ist.
Beispiel 17 Wie man den aktuellen Zeitstempel in Java 8 bekommt
Wenn Sie sich noch daran erinnern, wie Sie den aktuellen Zeitstempel vor Java 8 erhalten, ist es jetzt ein Kinderspiel. Die Instant -Klasse hat jetzt eine statische Fabrikmethode (), die den aktuellen Zeitstempel wie folgt zurückgeben kann:
Die Codekopie lautet wie folgt:
Sofortiger timestamp = Instant.now ();
System.out.println ("Was ist Wert dieses Augenblicks" + Zeitstempel);
Ausgabe:
Was ist der Wert dieses Augenblicks 2014-01-14T08: 33: 33.379z
Es ist ersichtlich, dass der aktuelle Zeitstempel Datum und Uhrzeit enthält, was Java.util.date sehr ähnlich ist. Um konvertieren beispielsweise Datum. Von (Instant) wird verwendet, um Instant in Java.util.date und Datum zu konvertieren.
Beispiel 18 wie man mithilfe eines vordefinierten Formaters in Java 8 analysiert/Formatdaten analysiert
Vor Java 8 war die Zeit- und Datumsformatierung ein technischer Auftrag. Dank Thread-lokaler Variablen macht es dies in einer Umgebung mit mehreren Threads funktionsfähig, aber Java hat diesen Zustand lange Zeit beibehalten. Diesmal wird ein brandneues Thread-Safe-Datum und -datum eingebracht. Es enthält auch einige vordefinierte Formatter, einschließlich der häufig verwendeten Datumsformate. In diesem Beispiel verwenden wir beispielsweise das vordefinierte Basicisodat -Format, das am 14. Februar 2014 bis 20140114 formatiert wird.
Die Codekopie lautet wie folgt:
String DayafterTommorrow = "20140116";
LocalDate formatiert = localDate.parse (Dayaftertommorrow,
DatetimeFormatter.basic_iso_date);
System.out.printf ("Datum aus String %S ist %s %n", Dayaftertommorrow, formatiert);
Ausgabe:
Datum erzeugt aus der String 20140116 ist 2014-01-16
Sie können sehen, dass das generierte Datum dem Wert der angegebenen Zeichenfolge übereinstimmt, was bedeutet, dass das Datumsformat geringfügig unterschiedlich ist.
Beispiel 19 So verwenden Sie ein benutzerdefiniertes Formatierer, um Daten in Java zu analysieren
Im obigen Beispiel haben wir die integrierte Zeitdatierungsformaterin verwendet, um die Datumszeichenfolge zu analysieren. Natürlich ist das vordefinierte Formatierer in der Tat gut, aber manchmal müssen Sie immer noch ein benutzerdefiniertes Datumsformat verwenden. Das Datumsformat im folgenden Beispiel ist "Mmm dd yyyy". Sie können jedes Muster an die statische Methode der DateTimeFormatter übergeben, die eine Instanz zurückgibt, wobei der wörtliche Wert dieses Musters wie im vorherigen Beispiel übereinstimmt. Zum Beispiel repräsentiert M immer noch den Monat, während M immer noch das Segment ist. Ein ungültiger Modus wirft eine Ausnahme von DateTimeParseException aus, aber wenn es sich um einen logischen Fehler handelt, z.
Die Codekopie lautet wie folgt:
String Goodfriday = "18. April 2014";
versuchen {
DatetimeFormatter formatter = datetimeFormatter.ofPattern ("mmm dd yyyy");
LocalDate Holiday = LocalDate.Parse (Goodfriday, Formatierer);
System.out.printf ("erfolgreich analyse String %S, Datum %S %n", Goodfriday, Holiday);
} catch (DateTimeParseException ex) {
System.out.printf ("%s ist nicht parsprical!%N", Goodfriday);
ex.printstacktrace ();
}
Ausgabe:
Erfolgreich analysierte String 18. April 2014 ist das Datum 2014-04-18
Sie können sehen, dass der Wert des Datums mit der in übergebenen Zeichenfolge übereinstimmt, das Format jedoch unterschiedlich ist.
Beispiel 20 So formatieren und in Java 8 in Saiten umwandeln und umwandeln
In den beiden vorherigen Beispielen, obwohl wir die DateTimeFormatter -Klasse verwendet haben, analysieren wir hauptsächlich die Datumszeichenfolge. In diesem Beispiel werden wir das Gegenteil tun. Hier haben wir eine Instanz der LocalDatetime -Klasse, die wir in eine formatierte Datumszeichenfolge konvertieren möchten. Dies ist bei weitem die einfachste und bequemste Möglichkeit, Daten in Java in Saiten umzuwandeln. Das folgende Beispiel gibt eine formatierte Zeichenfolge zurück. Das gleiche wie beim vorherigen Beispiel ist, dass wir weiterhin die angegebene Musterzeichenfolge verwenden müssen, um eine Instanz der DateTimeFormatter -Klasse zu erstellen, aber der Anruf ist nicht die Analysemethode der LocalDate -Klasse, sondern die Format () -Methode. Diese Methode gibt eine Zeichenfolge zurück, die das aktuelle Datum darstellt, und das entsprechende Muster ist in der eingehenden DateTimeFormatter -Instanz definiert.
Die Codekopie lautet wie folgt:
LocalDatetime avivalbaldate = localDateTime.now ();
versuchen {
DatetimeFormatter format = datetimeFormatter.ofPattern ("Mmm dd yyyy hh: mm a");
String Landing = avrivalDate.format (Format);
System.out.printf ("Ankunft bei: %s %n", Landung);
} catch (datetimeexception ex) {
System.out.printf ("%s kann nicht formatiert werden!%N", angekommen);
ex.printstacktrace ();
}
Ausgabe: Ankunft bei: 14. Januar 2014 16:33 Uhr
Es ist ersichtlich, dass die aktuelle Zeit durch das angegebene "mmm dd yyyy hh: mm a" -Muster dargestellt wird, das den von drei Buchstaben dargestellten Monat und die von AM und PM dargestellte Zeit enthält.
Mehrere wichtige Punkte der Datum und der Uhrzeit API in Java 8
Nachdem Sie diese Beispiele gelesen haben, glaube ich, dass Sie ein gewisses Verständnis der neuen Zeit- und Datums -API von Java 8 haben. Lassen Sie uns nun einige Schlüsselelemente zu dieser neuen API überprüfen.
1. Es liefert javax.time.zoneid, um Zeitzonen zu verarbeiten.
2. Es bietet LocalDate- und Lokalzeitklassen
3. Alle Klassen in der neuen Zeit- und Datums-API in Java 8 sind unveränderliche und thread-safe, was genau das Gegenteil des vorherigen Datums und des Kalender-API ist, wo sie wie Java.util.date und SimpleDateFormat sind. -sicher.
V. Sie basieren alle auf dem ISO -Kalendersystem.
5. Jeder Java -Entwickler sollte mindestens diese fünf Klassen in dieser neuen API kennen:
5.1) Instant es repräsentiert einen Zeitstempel, wie 2014-01-14T02: 20: 13,592Z, der aus der Java-Time.time.clock-Klasse wie folgt erhalten werden kann: Instant Current = Clock.System (zoneId.of ("Asien / /" Asien / Tokio ")). Instant ();
5.2) LOCALDATE Es ist ein Datum ohne Uhrzeit, wie z. B. 2014-01-14. Es kann verwendet werden, um Geburtstage, Jubiläum, Induktionstermine und vieles mehr zu speichern.
5.3) Lokale Zeit Es ist eine Zeit ohne Datum
5.4) LOCALDATETIME Es enthält Zeit und Datum, aber es gibt keinen Versatz mit der Zeitzone
5.5) ZonedDatetime Dies ist eine Vollzeit mit der Zeitzoneneinstellung basierend auf der UTC/Greenwich -Zeit
1. Das Hauptpaket dieser Bibliothek ist Java.Time, das Klassen enthält, die Datum, Uhrzeit, Instant und Dauer darstellen. Es verfügt über zwei Unterpackungen, eine ist java.time.foramt, was offensichtlich ist, wofür dies verwendet wird, und der andere ist Java.Time.temporal, was aus einer niedrigeren Ebene auf verschiedene Felder zugreifen kann.
2. Die Zeitzone bezieht sich auf die Region auf der Erde, die die gleiche Standardzeit hat. Jede Zeitzone verfügt über eine eindeutige Kennung, und es gibt auch ein Region/Stadt -Format (Asien/Tokio) und eine Offset -Zeit ab Greenwich. Zum Beispiel beträgt die Offset -Zeit in Tokio +09: 00.
3.OffsetDatetime -Klasse enthält tatsächlich localDatetime und zoneOffset. Es wird verwendet, um ein komplettes Datum (Jahr, Monat, Tag) und Uhrzeit (Stunde, Minute, Nanosekunde) mit dem Greenwich Time -Offset (+/- Stunde: Minute, z. B. +06: 00 oder -08: 00) enthalten.
V. Im Gegensatz zu SimpledateFormat ist es unveränderlich und fadensicher und kann bei Bedarf einer statischen Variablen zugeordnet werden. Die DateTimeFormatter -Klasse bietet viele vordefinierte Formatters und Sie können auch das gewünschte Format anpassen. Nach der Konvention gibt es natürlich auch eine Parse () -Methode, mit der die Zeichenfolge in ein Datum konvertiert werden. Wenn während der Konvertierung Fehler vorliegt, wird eine Ausnahme von DateTimeParseException ausgelöst. In ähnlicher Weise hat die DateFormatter -Klasse auch eine Format () -Methode für die Formatierungstermine.
5. Mit anderen Worten, die beiden Datumsformate von "Mmm D Yyyy" und "Mmm Dd Yyyy" sind ebenfalls etwas anders. Derjenige, der in "2. Januar 2014" kommt, wird einen Fehler melden, da er erwartet, dass zwei Zeichen aus dem Monat eingehen. Um dieses Problem zu lösen, müssen Sie beispielsweise "2. Januar 2014" auf "02. Januar 2014" geändert werden, um dieses Problem zu lösen, wenn der Tag einstellig ist.
Das dreht sich alles um Java 8, die neue Zeit- und Datums -API. Diese kurzen Beispiele reichen aus, um einige der neuen Klassen in dieser neuen API zu verstehen. Da es auf der Grundlage der tatsächlichen Aufgaben erklärt wird, müssen Sie bei der Arbeit in Java Zeit und Datum bearbeiten, wenn Sie in Java begegnen, müssen Sie nicht mehr suchen. Wir haben gelernt, wie man Datumsinstanzen erstellt und verändert. Wir haben auch die Unterschiede zwischen reinen Daten, Datum plus Uhrzeit, Datum plus Zeitzonen kennengelernt, wissen, wie man zwei Daten vergleichen und wie man einen bestimmten Tag mit einem bestimmten Datum findet, z. B. den nächsten Geburtstag, Jubiläum oder Versicherungsdatum. Wir haben auch gelernt, wie man in Java 8 auf Thread-Safe-Weise analysiert und formatiert, ohne Thread-lokale Variablen oder Bibliotheken von Drittanbietern zu verwenden. Die neue API ist für jede Zeit- und Datumsaufgaben kompetent.