519 Stimmen

Datumsformat in einem Java-String ändern

Ich habe eine String ein Datum darstellt.

String date_s = "2011-01-18 00:00:00.0";

Ich würde es gerne in eine Date und geben sie in YYYY-MM-DD Format.

2011-01-18

Wie kann ich das erreichen?


Okay, auf der Grundlage der Antworten, die ich unten gefunden habe, habe ich folgendes ausprobiert:

String date_s = " 2011-01-18 00:00:00.0"; 
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss"); 
Date date = dt.parse(date_s); 
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));

Aber sie gibt aus 02011-00-1 statt der gewünschten 2011-01-18 . Was mache ich falsch?

0voto

Arvind Kumar Avinash Punkte 62339

java.time

El java.util Date-Time API und ihre Formatierungs-API, SimpleDateFormat sind veraltet und fehleranfällig. Es wird empfohlen, sie nicht mehr zu verwenden und auf die moderne Date-Time-API * .

Nachfolgend wird eine Mitteilung der Homepage von Joda-Time :

Beachten Sie, dass ab Java SE 8 die Benutzer aufgefordert werden, auf java.time (JSR-310) zu migrieren - ein Kernbestandteil des JDK, der dieses Projekt ersetzt.

Lösung mit java.time die moderne Date-Time API:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDate = "2011-01-18 00:00:00.0";
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d H:m:s.S", Locale.ENGLISH);
        LocalDateTime ldt = LocalDateTime.parse(strDate, dtfInput);
        // Alternatively, the old way:
        // LocalDateTime ldt = dtfInput.parse(strDate, LocalDateTime::from);

        LocalDate date = ldt.toLocalDate();
        System.out.println(date);
    }
}

Ausgabe:

2011-01-18

ONLINE DEMO

Einige wichtige Hinweise zur Lösung:

  1. java.time ermöglichte den Aufruf parse y format Funktionen auf der Datum-Uhrzeit-Typ selbst, zusätzlich zur alten Methode (d. h. Aufruf von parse y format Funktionen auf den Formatierungstyp, d.h. DateTimeFormatter im Falle von java.time API).
  2. Die moderne Date-Time API basiert auf ISO 8601 und erfordert nicht die Verwendung eines DateTimeFormatter Objekt explizit zu verwenden, solange der Date-Time-String den ISO 8601-Standards entspricht, z. B. habe ich keine DateTimeFormatter für die Ausgabe, weil LocalDate#toString gibt bereits die Zeichenfolge im gewünschten Format zurück.
  3. Hier können Sie Folgendes verwenden y 代わりに u sondern Ich bevorzuge u a y .

Erfahren Sie mehr über die moderne Date-Time API von Pfad: Datum Uhrzeit .


* Wenn Sie aus irgendeinem Grund bei Java 6 oder Java 7 bleiben müssen, können Sie DreiZehn-Backport das den größten Teil der java.time Funktionalität für Java 6 und 7. Wenn Sie an einem Android-Projekt arbeiten und Ihr Android-API-Level noch nicht mit Java-8 übereinstimmt, prüfen Sie Java 8+ APIs verfügbar durch Desugaring y Wie man ThreeTenABP in einem Android-Projekt verwendet .

-1voto

SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");

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