JavaRush /Java-Blog /Random-DE /So verlieren Sie sich nicht in der Zeit – DateTime und Ka...

So verlieren Sie sich nicht in der Zeit – DateTime und Kalender

Veröffentlicht in der Gruppe Random-DE
Hallo! Heute beginnen wir mit der Arbeit mit einem neuen Datentyp, den wir bisher noch nicht kennengelernt haben, nämlich mit Datumsangaben. So verlieren Sie sich nicht in der Zeit – DateTime und Kalender – 1Ich denke, es bedarf keiner Erklärung, was ein Datum ist :) Im Prinzip ist es in Java durchaus möglich, das aktuelle Datum und die aktuelle Uhrzeit in einen regulären String zu schreiben.
public class Main {
   public static void main(String[] args) {

       String date = „11. Juni 2018“;
       System.out.println(date);
   }
}
Dieser Ansatz hat jedoch viele Nachteile. Die Klasse Stringwurde für die Arbeit mit Text erstellt und verfügt über entsprechende Methoden. Wenn wir das Datum irgendwie verwalten müssen (zum Beispiel 2 Stunden hinzufügen), Stringwird es hier nicht funktionieren. Oder zeigen Sie beispielsweise das aktuelle Datum und die aktuelle Uhrzeit zum Zeitpunkt der Kompilierung des Programms in der Konsole an. Auch hier hilft es nichts String: Während Sie den Code schreiben und ausführen, ändert sich die Zeit und das Unrelevante wird in der Konsole angezeigt. Daher haben seine Entwickler in Java mehrere Klassen für die Arbeit mit Datums- und Uhrzeitangaben bereitgestellt. Der erste ist Klassejava.util.Date

Java-Datumsklasse

Wir haben ihr den vollständigen Namen gegeben, da es in Java auch eine Klasse in einem anderen Paket gibt java.sql.Date. Lassen Sie sich nicht verwirren! Das Erste, was Sie darüber wissen müssen, ist, dass es das Datum in Millisekunden speichert , das seit dem 1. Januar 1970 vergangen ist. Es gibt sogar einen eigenen Namen für dieses Datum – „Unix-Zeit“. Eine ziemlich interessante Art, finden Sie nicht auch? :) Das zweite, was Sie sich merken sollten: Wenn Sie ein Objekt Datemit einem leeren Konstruktor erstellen, ist das Ergebnis das aktuelle Datum und die aktuelle Uhrzeit zum Zeitpunkt der Erstellung des Objekts . Erinnern Sie sich, wie wir geschrieben haben, dass eine solche Aufgabe für ein Datumsformat Stringproblematisch wäre ? Die Klasse Datelöst es leicht.
public class Main {
   public static void main(String[] args) {

       Date date = new Date();
       System.out.println(date);
   }
}
Führen Sie diesen Code mehrmals aus und Sie werden sehen, wie sich die Zeit jedes Mal ändert :) Dies ist genau deshalb möglich, weil sie in Millisekunden gespeichert wird: Sie sind die kleinste Zeiteinheit, weshalb die Ergebnisse so genau sind. Es gibt einen anderen Konstruktor für Date: Sie können die genaue Anzahl der Millisekunden angeben, die vom 1. Januar 1970, 00:00 Uhr, bis zum erforderlichen Datum vergangen sind, und er wird erstellt:
public class Main {
   public static void main(String[] args) {

       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}
Konsolenausgabe:

Fri May 30 08:20:12 MSD 2008
Wir haben es am 30. Mai 2008 erhalten. „Fr“ bedeutet den Wochentag – „Freitag“ (Freitag) und MSD – „Moskauer Sommerzeit“ (Moskauer Sommerzeit). Millisekunden werden im Format übertragen long, da ihre Anzahl meist nicht hineinpasst int. Welche Art von Datumsoperationen könnten wir also für unsere Arbeit benötigen? Nun, das Offensichtlichste ist natürlich der Vergleich . Stellen Sie fest, ob ein Datum später oder früher als ein anderes war. Dies kann auf unterschiedliche Weise erfolgen. Sie können beispielsweise die Methode . aufrufen Date.getTime(), die die Anzahl der Millisekunden zurückgibt, die seit Mitternacht des 1. Januar 1970 vergangen sind. Rufen wir es einfach für zwei Date-Objekte auf und vergleichen sie miteinander:
public class Main {
   public static void main(String[] args) {

       Date date1 = new Date();

       Date date2 = new Date();

       System.out.println((date1.getTime() > date2.getTime())?
               „Datum1 ist später als Datum2“ : „Datum1 liegt vor Datum2“);
   }
}
Abschluss:

date1 раньше date2
Aber es gibt einen bequemeren Weg, nämlich die Verwendung spezieller Methoden der Klasse Date: before(), after()und equals(). Sie alle geben das Ergebnis in zurück boolean. Die Methode before()prüft, ob unser Datum früher liegt als das, das wir als Argument übergeben:
public class Main {
   public static void main(String[] args) throws InterruptedException {

       Date date1 = new Date();

       Thread.sleep(2000);//Pause das Programm für 2 Sekunden
       Date date2 = new Date();

       System.out.println(date1.before(date2));
   }
}
Konsolenausgabe:

true
Die Methode funktioniert auf ähnliche Weise after(); sie prüft, ob unser Datum später war als das, das wir als Argument übergeben:
public class Main {
   public static void main(String[] args) throws InterruptedException {

       Date date1 = new Date();

       Thread.sleep(2000);//Pause das Programm für 2 Sekunden
       Date date2 = new Date();

       System.out.println(date1.after(date2));
   }
}
Konsolenausgabe:

false
In unseren Beispielen haben wir das Programm für 2 Sekunden in den Ruhezustand versetzt, damit die beiden Daten garantiert unterschiedlich sind. Auf schnellen Computern kann die Zeit zwischen der Erstellung date1von und date2weniger als eine Millisekunde betragen. In diesem Fall werden sowohl und before()als auch after()zurückgegeben false. Aber die Methode equals()wird in einer solchen Situation zurückkehren true! Schließlich vergleicht es für jedes Datum genau die Anzahl der Millisekunden, die seit dem 1. Januar 1970, 00:00 Uhr, vergangen sind. Objekte gelten nur dann als gleich, wenn sie auf die Millisekunde genau übereinstimmen:
public static void main(String[] args) {

   Date date1 = new Date();
   Date date2 = new Date();

   System.out.println(date1.getTime());
   System.out.println(date2.getTime());

   System.out.println(date1.equals(date2));
}
Hier ist noch etwas, worauf Sie achten müssen. Wenn Sie die Dokumentation für die Klasse Dateauf der Oracle-Website öffnen, werden Sie feststellen, dass viele ihrer Methoden und Konstruktoren als Deprecated(„veraltet“) gekennzeichnet sind. Schauen Sie hier: Klassendatum Hier ist, was die Ersteller von Java selbst über die Teile von Klassen sagen, die veraltet sind: „Ein mit @Deprecated annotiertes Programmelement ist etwas, von dessen Verwendung Programmierern abgeraten wird, normalerweise weil es gefährlich ist oder weil das so ist.“ Es gibt eine bessere Alternative.“ Dies bedeutet nicht, dass diese Methoden überhaupt nicht verwendet werden können. Darüber hinaus wird es höchstwahrscheinlich funktionieren, wenn Sie selbst versuchen, den Code mit ihnen in IDEA auszuführen. Nehmen wir zum Beispiel die veraltete Methode Date.getHours(), die die Anzahl der Stunden vom Objekt zurückgibt Date.
public static void main(String[] args) {

   Date date1 = new Date();

   System.out.println(date1.getHours());

}
Wenn zum Zeitpunkt der Ausführung des Codes die Uhrzeit beispielsweise 14:21 Uhr ist, wird die Zahl 14 angezeigt. Wie Sie sehen, ist die veraltete Methode durchgestrichen, funktioniert aber recht gut. Diese Methoden wurden nicht vollständig entfernt, um eine Menge Code, der bereits mit ihnen geschrieben wurde, nicht zu zerstören. Das heißt, diese Methoden sind nicht „kaputt“ oder „entfernt“, sondern werden aufgrund der Verfügbarkeit einer bequemeren Alternative einfach nicht zur Verwendung empfohlen. Darüber steht übrigens gleich in der Dokumentation: Wie man sich nicht in der Zeit verliert – DateTime und Kalender – 2Die meisten Methoden der Date-Klasse wurden in ihre verbesserte, erweiterte Version – die Klasse – verschoben Calendar. Wir werden ihn noch näher kennenlernen :)

Java-Kalender

Mit Java 1.1 wurde eine neue Klasse eingeführt – Calendar. Er hat die Arbeit mit Datumsangaben in Java etwas einfacher gemacht, als es zuvor aussah. Die einzige Implementierung der Klasse, Calendarmit der wir arbeiten werden, ist die Klasse GregorianCalendar(sie implementiert den Gregorianischen Kalender, nach dem die meisten Länder der Welt leben). Sein Hauptvorteil besteht darin, dass es mit Datumsangaben in einem bequemeren Format arbeiten kann. Er kann zum Beispiel:
  • Fügen Sie dem aktuellen Datum einen Monat oder Tag hinzu
  • Überprüfen Sie, ob das Jahr ein Schaltjahr ist.
  • Einzelne Datumskomponenten abrufen (z. B. die Monatszahl aus einem ganzen Datum abrufen)
  • Außerdem wurde darin ein sehr praktisches Konstantensystem entwickelt (viele davon werden wir weiter unten sehen).
Ein weiterer wichtiger Unterschied der Klasse Calendarbesteht darin, dass sie eine Konstante implementiert Calendar.Era: Sie können das Datum auf die Ära BC („Before Christ“ – vor der Geburt Christi, d. h. „vor unserer Ära“) oder AC („After Christ“ – „ unserer Zeit"). Schauen wir uns das alles anhand von Beispielen an. Erstellen wir einen Kalender mit dem Datum 25. Januar 2017:
public static void main(String[] args) {

  Calendar calendar = new GregorianCalendar(2017, 0 , 25);
}
Monate in der Klasse Calendar(wie Dateübrigens auch in ) beginnen bei Null, daher haben wir die Zahl 0 als zweites Argument übergeben. Wenn Sie mit einer Klasse arbeiten, müssen Sie vor allem Calendarverstehen, dass es sich um einen Kalender und nicht um ein separates Datum handelt. So verlieren Sie sich nicht in der Zeit – DateTime und Kalender – 3Ein Datum ist einfach eine Reihe von Zahlen, die einen bestimmten Zeitraum darstellen. Und ein Kalender ist ein ganzes Gerät, mit dem man viele Dinge mit Datumsangaben machen kann :) Das sieht man ganz deutlich, wenn man versucht, das Calendar-Objekt auf der Konsole auszugeben: Ausgabe:

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=0,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=25,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
Sehen Sie, wie viele Informationen es gibt! Der Kalender verfügt über eine Reihe von Eigenschaften, die ein normales Datum nicht hat, und alle werden an die Konsole ausgegeben (so funktioniert die Methode toString()in der Klasse Calendar). Wenn Sie bei der Arbeit nur ein einfaches Datum aus dem Kalender abrufen müssen, d. h. Objekt Date- Dies geschieht mithilfe einer Methode Calendar.getTime()(der Name ist nicht der logischste, aber es kann nichts getan werden):
public static void main(String[] args) {

   Calendar calendar = new GregorianCalendar(2017, 0 , 25);
   Date date = calendar.getTime();
   System.out.println(date);
}
Abschluss:

Wed Jan 25 00:00:00 MSK 2017
Jetzt haben wir den Kalender auf ein reguläres Datum „vereinfacht“. Lass uns weitermachen. Neben numerischen Symbolen für Monate Calendarkönnen im Unterricht auch Konstanten verwendet werden. Konstanten sind statische Felder einer Klasse Calendarmit einem bereits festgelegten Wert, der nicht geändert werden kann. Diese Option ist tatsächlich besser, da sie die Lesbarkeit des Codes verbessert.
public static void main(String[] args) {
   GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
}
Calendar.JANUARY— eine der Konstanten zur Angabe des Monats. Mit dieser Benennungsmöglichkeit vergisst zum Beispiel niemand, dass die Zahl „3“ April bedeutet und nicht den dritten Monat, den wir gewohnt sind – März. Sie schreiben einfach Calendar.APRIL- und das war's :) Alle Kalenderfelder (Tag, Monat, Minuten, Sekunden usw.) können mit der Methode individuell eingestellt werden set(). Dies ist sehr praktisch, da Calendarjedes Feld in der Klasse seine eigene Konstante hat und der endgültige Code so einfach wie möglich aussieht. Im vorherigen Beispiel haben wir beispielsweise ein Datum erstellt, aber nicht die aktuelle Uhrzeit dafür festgelegt. Stellen wir die Zeit auf 19:42:12 ein
public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar();
   calendar.set(Calendar.YEAR, 2017);
   calendar.set(Calendar.MONTH, 0);
   calendar.set(Calendar.DAY_OF_MONTH, 25);
   calendar.set(Calendar.HOUR_OF_DAY, 19);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   System.out.println(calendar.getTime());
}
Abschluss:

Wed Jan 25 19:42:12 MSK 2017
Wir rufen die Methode auf set(), übergeben ihr eine Konstante (je nachdem, welches Feld wir ändern möchten) und einen neuen Wert für dieses Feld. Es stellt sich heraus, dass die Methode set()eine Art „Super-Setter“ ist, der einen Wert nicht für ein Feld, sondern für viele Felder festlegen kann :) Das Addieren und Subtrahieren von Werten in einer Klasse Calendarerfolgt mithilfe von add(). Sie müssen darin das Feld, das Sie ändern möchten, und die Zahl übergeben – also genau den Betrag, den Sie zum aktuellen Wert addieren/subtrahieren möchten. Stellen wir zum Beispiel das Datum, das wir erstellt haben, auf vor zwei Monaten zurück:
public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 19);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   calendar.add(Calendar.MONTH, -2);//Um einen Wert zu subtrahieren, muss eine negative Zahl an die Methode übergeben werden
   System.out.println(calendar.getTime());
}
Abschluss:

Fri Nov 25 19:42:12 MSK 2016
Großartig! Wir haben das Datum auf 2 Monate zurückgesetzt. Dadurch hat sich nicht nur der Monat, sondern auch das Jahr von 2017 auf 2016 geändert. Die Berechnung des aktuellen Jahres bei Terminverschiebungen erfolgt selbstverständlich automatisch und muss nicht manuell gesteuert werden. Wenn Sie dieses Verhalten jedoch aus irgendeinem Grund deaktivieren müssen, können Sie dies tun. Eine spezielle Methode roll()kann Werte addieren und subtrahieren, ohne andere Werte zu beeinflussen. Zum Beispiel so:
public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 10);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   calendar.roll(Calendar.MONTH, -2);
   System.out.println(calendar.getTime());
}
Wir haben genau das Gleiche gemacht wie im vorherigen Beispiel – wir haben 2 Monate vom aktuellen Datum abgezogen. Aber jetzt funktionierte der Code anders: Der Monat änderte sich von Januar auf November, aber das Jahr blieb dasselbe wie 2017! Abschluss:

Sat Nov 25 10:42:12 MSK 2017
Weiter. Wie oben erwähnt, können alle Felder eines Objekts Calendarseparat abgerufen werden. Dafür ist die Methode verantwortlich get():
public static void main(String[] args) {
   GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 10);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   System.out.println("Jahr: " + calendar.get(Calendar.YEAR));
   System.out.println("Monat: " + calendar.get(Calendar.MONTH));
   System.out.println(„Nummer der Woche im Monat:“ + calendar.get(Calendar.WEEK_OF_MONTH));// Seriennummer der Woche im Monat

   System.out.println("Nummer: " + calendar.get(Calendar.DAY_OF_MONTH));

   System.out.println("Uhr: " + calendar.get(Calendar.HOUR));
   System.out.println("Protokoll: " + calendar.get(Calendar.MINUTE));
   System.out.println(„Sekunden:“ + calendar.get(Calendar.SECOND));
   System.out.println(„Millisekunden:“ + calendar.get(Calendar.MILLISECOND));

}
Abschluss:

Год: 2017 
Месяц: 0 
Порядковый номер недели в месяце: 4 
Число: 25 
Часы: 10 
Минуты: 42 
Секунды: 12 
Миллисекунды: 0
Das heißt, neben dem „Super-Setter“ Calendargibt es in der Klasse auch einen „Super-Getter“ :) Ein weiterer interessanter Punkt ist natürlich die Arbeit mit Epochen. Um ein Datum „BC“ zu erstellen, müssen Sie das Feld verwenden. Calendar.Era Erstellen wir beispielsweise ein Datum, das die Schlacht von Cannae angibt, in der Hannibal die Armee von Rom besiegte. Dies geschah am 2. August 216 v. Chr. z.B.:
public static void main(String[] args) {
   GregorianCalendar cannes = new GregorianCalendar(216, Calendar.AUGUST, 2);
   cannes.set(Calendar.ERA, GregorianCalendar.BC);

   DateFormat df = new SimpleDateFormat("dd MMM yyy GG");
   System.out.println(df.format(cannes.getTime()));
}
Hier haben wir die Klasse verwendet SimpleDateFormat, um das Datum in einem für uns verständlicheren Format anzuzeigen (die Buchstaben „GG“ sind für die Darstellung der Ära verantwortlich). Abschluss:

02 авг 216 до н.э.
CalendarEs gibt viele weitere Methoden und Konstanten in der Klasse , lesen Sie mehr darüber in der Dokumentation:

Konvertieren einer Zeichenfolge in ein Datum

Um String in Date zu konvertieren, können Sie die Java-Hilfsklasse SimpleDateFormat verwenden . Dies ist die Klasse, die Sie benötigen, um ein Datum in ein von Ihnen definiertes Format zu konvertieren. So verlieren Sie sich nicht in der Zeit – DateTime und Kalender – 5Es ist wiederum DateFormat sehr ähnlich . Der einzige bemerkenswerte Unterschied zwischen den beiden besteht darin, dass SimpleDateFormat zum Formatieren (Konvertieren eines Datums in eine Zeichenfolge) und zum Parsen der Zeichenfolge in ein länderspezifisches Datum verwendet werden kann, während DateFormat kein Gebietsschema unterstützt. Darüber hinaus ist DateFormat eine abstrakte Klasse, die grundlegende Unterstützung für die Formatierung und Analyse von Datumsangaben bietet, während SimpleDateFormat eine konkrete Klasse ist, die die DateFormat-Klasse erweitert. So sieht ein Beispiel für die Erstellung eines SimpleDateFormat-Objekts und die Formatierung eines Datums aus:
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(1212121212121L);

System.out.println(formatter.format(date));
Im obigen Beispiel haben wir das Muster „yyyy-MM-dd HH:mm:ss“ verwendet, was Folgendes bedeutet:
  • 4 Ziffern für Jahr (JJJJ);
  • 2 Ziffern für Monat (MM);
  • 2 Ziffern für Tag (TT);
  • 2 Ziffern für Stunden im 24-Stunden-Format (HH);
  • 2 Ziffern für Minuten (mm);
  • 2 Ziffern für Sekunden (ss).
Die Trennzeichen und die Reihenfolge der Mustersymbole bleiben erhalten. Konsolenausgabe:
2008-05-30 08:20:12
Es gibt eine ganze Reihe von Vorlagenbriefen für die SimpleDateFormat- Klasse . Damit Sie nicht verwirrt werden, haben wir sie in einer Tabelle zusammengestellt:
Symbol Beschreibung Beispiel
G Ära (in englischer Lokalisierung - AD und BC) ANZEIGE
j Jahr (4-stellige Zahl) 2020
jj Jahr (letzte 2 Ziffern) 20
jjjj Jahr (4-stellige Zahl) 2020
M Monatsnummer (ohne führende Nullen) 8
MM Monatsnummer (mit führenden Nullen, wenn Monatsnummer < 10) 04
MMM Dreibuchstabige Monatsabkürzung (je nach Lokalisierung) Jan
MMMM Vollständiger Monatsname Juni
w Woche des Jahres (ohne führende Nullen) 4
ww Woche des Jahres (mit führenden Nullen) 04
W Woche im Monat (ohne führende Nullen) 3
WW Woche im Monat (mit führender Null) 03
D Tag des Jahres 67
D Tag des Monats (ohne führende Nullen) 9
dd Tag des Monats (mit führenden Nullen) 09
F Wochentag im Monat (ohne führende Nullen) 9
FF Wochentag im Monat (mit führenden Nullen) 09
E Wochentag (Abkürzung) W
EEEEE Wochentag (vollständig) Freitag
u Wochentagsnummer (ohne führende Nullen) 5
uu Nummer des Wochentags (mit führenden Nullen) 05
A AM/PM-Markierung BIN.
H Stunden im 24-Stunden-Format ohne führende Nullen 6
HH Uhr im 24-Stunden-Format mit führender Null 06
k Anzahl der Stunden im 24-Stunden-Format 18
K Anzahl der Stunden im 12-Stunden-Format 6
H Uhrzeit im 12-Stunden-Format ohne führende Nullen 6
hh Uhrzeit im 12-Stunden-Format mit führender Null 06
M Minuten ohne führende Nullen 32
mm Minuten mit führender Null 32
S Sekunden ohne führende Nullen elf
ss Sekunden mit führender Null elf
S Millisekunden 297
z Zeitzone osteuropäische Zeit, elektronischer Energietransfer, voraussichtliche Flugdauer
Z Zeitzone im RFC 822-Format 300
Beispiele für Musterzeichenkombinationen:
Probe Beispiel
DD / MM / JJJJ 01.11.2020
jjjj-MM-tt 01.10.2019
HH:mm:ss.SSS 23:59.59.999
jjjj-MM-tt HH:mm:ss 30.11.2018 03:09:02
jjjj-MM-tt HH:mm:ss.SSS 01.03.2016 01:20:47.999
jjjj-MM-tt HH:mm:ss.SSS Z 13.13.2013 23:59:59.999 +0100
Wenn Sie einen kleinen Fehler mit dem Format machen, können Sie Eigentümer einer java.text.ParseException werden, und das ist keine besonders erfreuliche Leistung. Nun, der kurze Ausflug in SimpleDateFormat ist vorbei – kehren wir zur Übersetzung von Java-Strings in date zurück . SimpleDateFormat bietet uns solche Möglichkeiten und wir werden diesen Prozess Schritt für Schritt durchgehen.
  1. Erstellen Sie eine Zeile, aus der Sie das Datum festlegen müssen:

    String strDate = "Sat, April 4, 2020";
  2. Wir erstellen ein neues SimpleDateFormat- Objekt mit einer Vorlage, die mit dem übereinstimmt, was wir in der Zeichenfolge haben (andernfalls können wir es nicht analysieren):

    SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMMM d, yyyy", Locale.ENGLISH);

    Wie Sie sehen, haben wir hier ein Locale-Argument. Wenn wir es weglassen, wird das Standardgebietsschema verwendet, das nicht immer Englisch ist.

    Wenn das Gebietsschema nicht mit der Eingabezeichenfolge übereinstimmt, werden an die Sprache gebundene Zeichenfolgendaten wie unsere Mon oder April nicht erkannt und lösen eine java.text.ParseException aus, selbst wenn das Muster übereinstimmt.

    Allerdings müssen wir das Format nicht angeben, wenn wir eine Vorlage verwenden, die nicht sprachspezifisch ist. Als Beispiel: jjjj-MM-tt HH:mm:ss

  3. Wir erstellen ein Datum mit einem Formatierer, der es wiederum aus der Eingabezeichenfolge analysiert:

    try {
      Date date = formatter.parse(strDate);
      System.out.println(date);
    }
    catch (ParseException e) {
      e.printStackTrace();
    }

    Konsolenausgabe:

    
    Sat Apr 04 00:00:00 EEST 2020

    Hmmm... Aber das Format ist nicht mehr dasselbe!

    Um das gleiche Format zu erstellen, verwenden wir erneut den Formatierer:

    System.out.println(formatter.format(date));

    Konsolenausgabe:

    
    Sat, April 4, 2020

SimpleDateFormat und Kalender

Mit SimpleDateFormat können Sie alle von Ihnen erstellten Datums- und Kalenderobjekte für die spätere Verwendung formatieren. Betrachten wir einen so interessanten Punkt wie die Arbeit mit Epochen. Um ein „BC“-Datum zu erstellen, müssen Sie das Feld Calendar.Era verwenden. Erstellen wir beispielsweise ein Datum, das auf die Schlacht von Cannae hinweist, in der Hannibal die Armee von Rom besiegte. Dies geschah am 2. August 216 v. Chr. z.B.:
public static void main(String[] args) {
   GregorianCalendar cannes = new GregorianCalendar(216, Calendar.AUGUST, 2);
   cannes.set(Calendar.ERA, GregorianCalendar.BC);

   DateFormat df = new SimpleDateFormat("dd MMM yyy GG");
   System.out.println(df.format(cannes.getTime()));
}
Hier haben wir die Klasse SimpleDateFormat verwendet, um das Datum in einem für uns verständlicheren Format anzuzeigen (wie oben erwähnt, sind die Buchstaben „GG“ für die Anzeige der Ära verantwortlich). Abschluss:

02 авг 216 до н.э.

Java-Datumsformat

Hier ist ein weiterer Fall. Nehmen wir an, dass uns dieses Datumsformat nicht zusagt:

Sat Nov 25 10:42:12 MSK 2017
Also. Mit unseren Möglichkeiten im Java-Datumsformat können Sie es ohne große Schwierigkeiten in Ihr eigenes ändern:
public static void main(String[] args) {

   SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, d MMMM yyyy");
   Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
   calendar.set(Calendar.HOUR, 10);
   calendar.set(Calendar.MINUTE, 42);
   calendar.set(Calendar.SECOND, 12);

   calendar.roll(Calendar.MONTH, -2);
   System.out.println(dateFormat.format(calendar.getTime()));
}
Abschluss:

суббота, 25 Ноябрь 2017
Viel besser, oder? :) :)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION