484 Stimmen

Wie kann ich Daten mit LocalDateTime analysieren/formatieren? (Java 8)

Java 8 hat eine neue java.time-API zur Arbeit mit Datum und Zeit hinzugefügt (JSR 310).

Ich habe Datum und Uhrzeit als String (z. B. "2014-04-08 12:30"). Wie kann ich eine LocalDateTime-Instanz aus dem gegebenen String erhalten?

Nachdem ich mit dem LocalDateTime-Objekt fertig bin: Wie kann ich dann die LocalDateTime-Instanz wieder in einen String mit dem gleichen Format wie oben gezeigt konvertieren?

748voto

micha Punkte 45016

Datum und Uhrzeit parsen

Um ein LocalDateTime-Objekt aus einem String zu erstellen, können Sie die statische LocalDateTime.parse()-Methode verwenden. Sie nimmt einen String und einen DateTimeFormatter als Parameter. Der DateTimeFormatter wird verwendet, um das Datum-/Uhrzeitmuster anzugeben.

String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

Datum und Uhrzeit formatieren

Um aus einem LocalDateTime-Objekt eine formatierte Zeichenfolge zu erstellen, können Sie die format()-Methode verwenden.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.of(1986, Month.APRIL, 8, 12, 30);
String formattedDateTime = dateTime.format(formatter); // "1986-04-08 12:30"

Es gibt einige häufig verwendete Datum-/Uhrzeitformate, die als Konstanten im DateTimeFormatter vordefiniert sind. Zum Beispiel: Wenn Sie DateTimeFormatter.ISO_DATE_TIME verwenden, um die obige LocalDateTime-Instanz zu formatieren, würde das Ergebnis die Zeichenfolge "1986-04-08T12:30:00" sein.

Die parse()- und format()-Methoden sind für alle datum-/uhrzeitbezogenen Objekte verfügbar (z. B. LocalDate oder ZonedDateTime).

213voto

Sufiyan Ghori Punkte 17189

Sie können auch LocalDate.parse() oder LocalDateTime.parse() auf einen String verwenden, ohne ihm ein Muster anzugeben, wenn der String im ISO 8601-Format vorliegt.

Zum Beispiel,

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
System.out.println("Datum: " + aLD);

String strDatewithTime = "2015-08-04T10:11:30";
LocalDateTime aLDT = LocalDateTime.parse(strDatewithTime);
System.out.println("Datum mit Zeit: " + aLDT);

Ausgabe,

Datum: 2015-08-04
Datum mit Zeit: 2015-08-04T10:11:30

Und verwenden Sie DateTimeFormatter nur, wenn Sie mit anderen Datumsformaten umgehen müssen.

Zum Beispiel, in dem folgenden Beispiel stellt dd MMM uuuu den Tag des Monats (zwei Ziffern), drei Buchstaben des Monatsnamens (Jan, Feb, Mär,...) und ein vierstelliges Jahr dar:

DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu");
String anotherDate = "04 Aug 2015";
LocalDate lds = LocalDate.parse(anotherDate, dTF);
System.out.println(anotherDate + " wird analysiert als " + lds);

Ausgabe

04 Aug 2015 wird analysiert als 2015-08-04

Denken Sie auch daran, dass das DateTimeFormatter-Objekt bidirektional ist; es kann sowohl Eingaben analysieren als auch Ausgaben formatieren.

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu");
System.out.println(aLD + " wird formatiert als " + dTF.format(aLD));

Ausgabe

2015-08-04 wird formatiert als 04 Aug 2015

(Siehe vollständige Liste der Muster für Datumsformatierung und -analyse im DateFormatter.)

  Symbol  Bedeutung                     Darstellung      Beispiele
  ------  -------                     ------------      -------
   G       Ära                         Text              AD; Anno Domini; A
   u       Jahr                        Jahr              2004; 04
   y       Jahr-Ära                   Jahr              2004; 04
   D       Tag des Jahres                 Nummer            189
   M/L     Monat des Jahres               Nummer/Text       7; 07; Jul; July; J
   d       Tag des Monats                Nummer            10

   Q/q     Quartal des Jahres             Nummer/Text       3; 03; Q3; 3. Quartal
   Y       Jahreszahl der Woche             Jahr              1996; 96
   w       Woche des jahrbasierten Jahres     Nummer            27
   W       Woche des Monats               Nummer            4
   E       Wochentag                 Text              Di; Dienstag; T
   e/c     lokaler Wochentag       Nummer/Text       2; 02; Di; Dienstag; T
   F       Woche des Monats               Nummer            3

   a       AM-PM-des-Tages                Text              PM
   h       Uhrzeit des Vormittags (1-12)  Nummer            12
   K       Stunde des Vormittags (0-11)        Nummer            0
   k       Uhrzeit des Tages (1-24)  Nummer            0

   H       Stunde des Tages (0-23)          Nummer            0
   m       Minute der Stunde              Nummer            30
   s       Sekunde der Minute            Nummer            55
   S       Bruchteil der Sekunde          Bruchteil          978
   A       Millisekunden des Tages                Nummer            1234
   n       Nanosekunde              Nummer            987654321
   N       Nanosekunden des Tages                 Nummer            1234000000

   V       Zeitzonen-ID                Zeitzonen-ID           America/Los_Angeles; Z; -08:30
   z       Zeitzonenname              Zeitzonenname         Pacific Standard Time; PST
   O       Lokalisierte Zeitzone-Versatz       Versatz-O          GMT+8; GMT+08:00; UTC-08:00;
   X       Zeitzonenversatz 'Z' für Null    Versatz-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
   x       Zeitzonenversatz                 Versatz-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
   Z       Zeitzonenversatz                 Versatz-Z          +0000; -0800; -08:00;

   p       Nächsten ausführen                    Modifikator      1

   '       Text ausblenden            Begrenzer
   ''      einfaches Anführungszeichen                Literal           '
   [       optionale Sektion starten
   ]       optionaler Abschnittsende
   #       für zukünftige Verwendung reserviert
   {       für zukünftige Verwendung reserviert
   }       für zukünftige Verwendung reserviert

53voto

Marcio Jasinski Punkte 1379

Sowohl Sufiyan Ghori's als auch micha's Antwort erklären die Frage zu String-Mustern sehr gut. Falls jedoch mit ISO 8601 gearbeitet wird, ist kein Bedarf, DateTimeFormatter anzuwenden, da LocalDateTime bereits dafür vorbereitet ist:

Wandeln Sie ein LocalDateTime in eine Zeitzonen-ISO 8601-Zeichenfolge um

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC); // Sie können eine andere Zone verwenden
String iso8601 = zdt.toString();

Wandeln Sie eine ISO8601-Zeichenfolge wieder in ein LocalDateTime um

String iso8601 = "2016-02-14T18:32:04.150Z";
ZonedDateTime zdt = ZonedDateTime.parse(iso8601);
LocalDateTime ldt = zdt.toLocalDateTime();

6voto

Yu Cheng Punkte 131

Ein weiterer Punkt zu beachten bei LocalDateTime.parse ist, dass Sie es nicht mit einem benutzerdefinierten Formatierer mit nur Datumsformatierungssymbolen verwenden können, wie uuuuMMdd. In diesem Fall sollten Sie stattdessen LocalDate.parse verwenden. Zum Beispiel:

String s = "20210223";

// ok
LocalDate.parse(s, DateTimeFormatter.ofPattern("uuuuMMdd"));

// java.time.format.DateTimeParseException
LocalDateTime.parse(s, DateTimeFormatter.ofPattern("uuuuMMdd"));

5voto

Holen Sie sich die aktuelle UTC-Zeit im erforderlichen Format

// Aktuelle UTC-Zeit
OffsetDateTime utc = OffsetDateTime.now(ZoneOffset.UTC);

// Lokales Datum und Uhrzeit erhalten
LocalDateTime localDateTime = utc.toLocalDateTime();
System.out.println("*************" + localDateTime);

// Formatierter UTC-Zeit
DateTimeFormatter dTF = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println("wird formatiert als " + dTF.format(localDateTime));

// Holen Sie sich die UTC-Zeit für das aktuelle Datum
Date now = new Date();
LocalDateTime utcDateTimeForCurrentDateTime = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDateTime();
DateTimeFormatter dTF2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println("wird formatiert als " + dTF2.format(utcDateTimeForCurrentDateTime));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X