Konvertieren Sie java.util.Date in eine Zeichenfolge

Lesezeit: 6 Minuten

Konvertieren Sie javautilDate in eine Zeichenfolge
NovizePrgrmr

Ich möchte a konvertieren java.util.Date widersprechen a String auf Java.

Das Format ist 2010-05-30 22:15:52

  • Ähnliche Frage: stackoverflow.com/questions/4772425/format-date-in-java

    – Wadzim

    26. März 2015 um 16:18 Uhr

  • @harschware FYI, die Joda-Zeit Projekt ist jetzt drin Wartungsmoduswobei das Team die Migration zu den berät java.time Klassen. Sehen Tutorial von Oracle.

    – Basilikum Bourque

    16. Mai 2018 um 21:29 Uhr

  • Ich empfehle Ihnen, und nicht zu verwenden Date im Jahr 2019. Diese Klasse ist schlecht gestaltet und längst veraltet. Verwenden Sie stattdessen Instant oder eine andere Klasse aus java.time, die moderne Java-API für Datum und Uhrzeit.

    – Ole VV

    23. Mai 2019 um 14:07 Uhr

1646336838 987 Konvertieren Sie javautilDate in eine Zeichenfolge
Ali Ben Messoud

Konvertiere ein Datum zu einem Schnur verwenden DateFormat#format Methode:

String pattern = "MM/dd/yyyy HH:mm:ss";

// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);

// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();        
// Using DateFormat format method we can create a string 
// representation of a date with the defined format.
String todayAsString = df.format(today);

// Print the result!
System.out.println("Today is: " + todayAsString);

Von http://www.kodejava.org/examples/86.html

  • warum verwenden Calendar statt schlicht new Date() ? Gibt es einen Unterschied?

    – Alexander Malachow

    19. August 2013 um 4:35 Uhr

  • Achtung: SimpleDateFormat ist nicht threadsicher. stackoverflow.com/questions/6840803/…

    – Zack

    17. Januar 2014 um 0:20 Uhr


  • Calendar ist eine abstrakte Klasse, Date ist konkret. Date hat keine Ahnung von TimeZone, Locale oder anderen guten Sachen, die wir alle nie benutzen.

    – nckbrz

    13. März 2014 um 22:40 Uhr

  • Die MM/dd/yyyy Format ist dumm und kaputt. Benutze es nicht. Verwenden Sie immer dd/MM/yyyy oder yyyy-MM-dd.

    – SystemParadox

    23. September 2015 um 12:53 Uhr

  • @SystemParadox – Es ist dumm, aber das macht es nicht sinnlos. Ich wurde ausdrücklich gebeten, es zu verwenden, weil es dem entspricht, was die Leute von Berichten erwarten. (Ich würde bevorzugen yyyy-MM-dd überall, aber was kann man tun?).

    – Herbst Leonard

    22. Oktober 2015 um 21:00 Uhr

Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);

  • Kommen Sie hierher zum Kopieren und Einfügen, diese Antwort spart mir Zeit, danke und positiv bewertet.

    – bzuo

    23. März 2021 um 2:31 Uhr

Konvertieren Sie javautilDate in eine Zeichenfolge
webpat

Commons-lang DateFormatUtils ist voller Leckereien (wenn Sie commons-lang in Ihrem Klassenpfad haben)

//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");

  • Erfordert eine zusätzliche null prüfen.

    – Farrukh Chishti

    8. April 2020 um 10:47 Uhr

Konvertieren Sie javautilDate in eine Zeichenfolge
Basil Bourque

tl;dr

myUtilDate.toInstant()  // Convert `java.util.Date` to `Instant`.
          .atOffset( ZoneOffset.UTC )  // Transform `Instant` to `OffsetDateTime`.
          .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a String.
          .replace( "T" , " " )  // Put a SPACE in the middle.

2014-11-14 14:05:09

java.time

Der moderne Weg ist mit den java.time-Klassen, die jetzt die lästigen alten Legacy-Date-Time-Klassen ersetzen.

Konvertieren Sie zuerst Ihre java.util.Date zu einem Instant. Die Instant Klasse repräsentiert einen Moment auf der Zeitachse in koordinierte Weltzeit mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).

Konvertierungen zu/von java.time werden durch neue Methoden durchgeführt, die den alten Klassen hinzugefügt wurden.

Instant instant = myUtilDate.toInstant();

Beide Ihre java.util.Date und java.time.Instant sind in koordinierte Weltzeit. Wenn Sie das Datum und die Uhrzeit als UTC sehen möchten, ist das so. Anruf toString um einen String im Standard zu generieren ISO 8601 Format.

String output = instant.toString();  

2014-11-14T14:05:09Z

Für andere Formate müssen Sie Ihre transformieren Instant in die flexibleren OffsetDateTime.

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

odt.toString(): 2020-05-01T21:25:35.957Z

Siehst du das Code läuft live auf IdeOne.com.

Um einen String im gewünschten Format zu erhalten, geben Sie a an DateTimeFormatter. Sie können ein benutzerdefiniertes Format angeben. Aber ich würde einen der vordefinierten Formatierer verwenden (ISO_LOCAL_DATE_TIME) und ersetzen Sie die T in seiner Ausgabe mit einem SPACE.

String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14:05:09

Übrigens empfehle ich diese Art von Format nicht, bei dem Sie absichtlich das verlieren offset-from-UTC oder Zeitzoneninformationen. Erzeugt Mehrdeutigkeit hinsichtlich der Bedeutung des Datums-/Uhrzeitwerts dieser Zeichenfolge.

Achten Sie auch auf Datenverlust, da jeder Sekundenbruchteil in der Darstellung des Datums-/Uhrzeitwerts Ihres Strings ignoriert (effektiv abgeschnitten) wird.

Den gleichen Moment durch die Linse einer bestimmten Region zu sehen Wandzeitgelten a ZoneId ein bekommen ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt.toString(): 2014-11-14T14:05:09-05:00[America/Montreal]

Um einen formatierten String zu generieren, machen Sie dasselbe wie oben, aber ersetzen Sie odt mit zdt.

String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14:05:09

Wenn Sie diesen Code sehr oft ausführen, möchten Sie vielleicht etwas effizienter sein und den Aufruf von vermeiden String::replace. Wenn Sie diesen Anruf fallen lassen, wird Ihr Code auch kürzer. Legen Sie bei Bedarf Ihr eigenes Formatierungsmuster fest DateTimeFormatter Objekt. Cachen Sie diese Instanz als Konstante oder Member zur Wiederverwendung.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.

Wenden Sie diesen Formatierer an, indem Sie die Instanz übergeben.

String output = zdt.format( f );

Über java.time

Die java.time Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die lästigen alten Datums-Zeit-Klassen wie z java.util.Date, .Calendar& java.text.SimpleDateFormat.

Die Joda-Zeit Projekt, jetzt in Wartungsmodusrät zur Migration auf java.time.

Weitere Informationen finden Sie unter Oracle-Tutorial. Und durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen.

Ein Großteil der java.time-Funktionalität wurde in Java 6 & 7 zurückportiert ThreeTen-Backport und weiter angepasst Android in ThreeTenABP (sehen Wie benutzt man…).

Die ThreeTen-Extra project erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen zu java.time.

1646336839 698 Konvertieren Sie javautilDate in eine Zeichenfolge
Wadzim

Alternative Einzeiler im einfachen alten Java:

String.format("The date: %tY-%tm-%td", date, date, date);

String.format("The date: %1$tY-%1$tm-%1$td", date);

String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);

String.format("The date and time in ISO format: %tF %<tT", date);

Dies nutzt Formatierer und relative Indizierung statt SimpleDateFormat das ist übrigens nicht Thread-sicher.

Etwas repetitiver, benötigt aber nur eine Aussage. Dies kann in manchen Fällen praktisch sein.

  • Das ist (un)genial. Viel bessere Leistung für eingeschränkte Umgebungen

    – Ruslan

    30. April 2020 um 19:22 Uhr


Konvertieren Sie javautilDate in eine Zeichenfolge
Basil Bourque

Warum verwenden Sie nicht Joda (org.joda.time.DateTime)? Es ist im Grunde ein Einzeiler.

Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");

// output: 2014-11-14 14:05:09

  • Das ist (un)genial. Viel bessere Leistung für eingeschränkte Umgebungen

    – Ruslan

    30. April 2020 um 19:22 Uhr


1646336839 317 Konvertieren Sie javautilDate in eine Zeichenfolge
pickypg

Es sieht so aus, als ob Sie suchen SimpleDateFormat.

Format: JJJJ-MM-TT kk:mm:ss

  • Macht das “kk” etwas Besonderes? Ich denke, Eric will es innerhalb von 24 Stunden.

    – Charlie Salz

    16. April 2011 um 1:03 Uhr


  • Ja, die Stunde am Tag (1-24), aber das ist wahrscheinlich nicht das, was das OP braucht. HH (0-23) ist häufiger.

    – BalusC

    16. April 2011 um 1:04 Uhr


  • @Cahrlie Salts kk geht von 1-24, wo HH von 0-23 geht, und es war wahrscheinlich ein bisschen anmaßend von mir anzunehmen, dass er 1-24 wollte @BalusC Das DateFormat-Objekt analysiert und formatiert.

    – wählerisch

    16. April 2011 um 1:06 Uhr

  • Ich verstehe die Relevanz Ihres letzten Kommentars nicht. Mein Kommentar war an Charlie gerichtet.

    – BalusC

    16. April 2011 um 1:10 Uhr


  • Ich bin an .Net-Formate gewöhnt, bei denen HH 24-mal und hh am/pm ist. Daher das Kopfzerbrechen.

    – Charlie Salz

    16. April 2011 um 1:22 Uhr

926820cookie-checkKonvertieren Sie java.util.Date in eine Zeichenfolge

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy