464 Stimmen

java.util.Date in String umwandeln

Ich möchte eine java.util.Date Objekt zu einem String in Java.

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

2 Stimmen

0 Stimmen

@harschware FYI, die Joda-Time Projekt ist jetzt in Wartungsmodus Das Team rät zur Migration auf den java.time Klassen. Siehe Anleitung von Oracle .

1 Stimmen

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

842voto

Ali Ben Messaoud Punkte 11380

Konvertieren einer Date zu einer Zeichenfolge mit 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);

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

29 Stimmen

Warum verwenden Calendar anstelle von einfachem new Date() ? Gibt es einen Unterschied?

11 Stimmen

Vorsicht! SimpleDateFormat ist nicht thread-sicher. stackoverflow.com/questions/6840803/

1 Stimmen

Das Format Ihrer Antwort entspricht nicht dem, wonach der Auftraggeber gefragt hat. Außerdem ist es komplizierter als es sein müsste.

262voto

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

3 Stimmen

Hierher kommen, um zu kopieren und einzufügen, diese Antwort spart meine Zeit, Danke und Upvoted.

71voto

webpat Punkte 1789

Commons-Sprache DateFormatUtils ist voll von Leckerbissen (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");

1 Stimmen

Erfordert eine zusätzliche null prüfen.

25voto

Basil Bourque Punkte 256611

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 sind die java.time-Klassen, die jetzt die lästigen alten Datum-Zeit-Klassen verdrängen.

Konvertieren Sie zunächst Ihre java.util.Date zu einer Instant . Die Instant Klasse stellt einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Ziffern eines Dezimalbruchs).

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

Instant instant = myUtilDate.toInstant();

Sowohl Ihr java.util.Date y java.time.Instant sind in UTC . Wenn Sie das Datum und die Uhrzeit in UTC sehen wollen, ist das kein Problem. aufrufen toString um einen String im Standardformat zu erzeugen ISO 8601 Format.

String output = instant.toString();  

2014-11-14T14:05:09Z

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

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

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

Siehe das Code wird live auf IdeOne.com ausgeführt .

Um einen String im gewünschten Format zu erhalten, geben Sie eine DateTimeFormatter . Sie könnten ein benutzerdefiniertes Format angeben. Ich würde jedoch 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 man absichtlich die Abweichung von der UTC oder Zeitzoneninformationen. Dies führt zu Unklarheiten hinsichtlich der Bedeutung des Datums- und Zeitwerts dieser Zeichenfolge.

Achten Sie auch auf Datenverluste, da Sekundenbruchteile bei der Darstellung des Datums- und Zeitwerts in Ihrem String ignoriert (abgeschnitten) werden.

Den gleichen Moment durch die Linse einer bestimmten Region zu sehen Wanduhrzeit anwenden, eine ZoneId um eine ZonedDateTime .

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

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

Um eine formatierte Zeichenkette zu erzeugen, gehen Sie genauso vor wie oben, ersetzen aber 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, sollten Sie vielleicht etwas effizienter sein und den Aufruf von String::replace . Wenn Sie diesen Aufruf weglassen, wird Ihr Code auch kürzer. Wenn Sie es wünschen, können Sie Ihr eigenes Formatierungsmuster in Ihrem eigenen DateTimeFormatter Objekt. Zwischenspeichern dieser Instanz als Konstante oder Mitglied 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

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

El Joda-Time Projekt, jetzt in Wartungsmodus rät zur Migration auf java.time.

Weitere Informationen finden Sie in der Oracle-Tutorial . Auf Stack Overflow finden Sie viele Beispiele und Erklärungen.

Ein Großteil der java.time-Funktionalität wurde in Java 6 und 7 zurückportiert in DreiZehn-Backport und weiter angepasst an Android en DreiZehnABP (siehe Wie benutzt man ).

El DreiZehn-Extra Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time.

0 Stimmen

Hier sind Code-Beispiele für die Formatierung mit Java 8 Time API: stackoverflow.com/a/43457343/603516

0 Stimmen

Dieser Code funktioniert nicht OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ); odt.toString(): 2014-11-14T14:05:09+00:00 Gibt es einen neuen Java 8 Code, um das gleiche Format zu haben 2014-11-14T14:05:09+00:00 ? Vielen Dank!

0 Stimmen

@BobBolden Sie haben Recht, Z verwendet wird, statt +00:00 standardmäßig. Ich habe die Antwort korrigiert, danke. Zu Ihrer Information, das bedeutet dasselbe: Z , ausgesprochen "Zulu", bedeutet einen Versatz von null Stunden-Minuten-Sekunden, was dem Wert +00:00 . Die ISO 8601 Standard unterstützt beide Stile.

24voto

Vadzim Punkte 22887

Alternative Einzeiler in einfachem, altem 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);

Diese verwendet Formatierer y relative Indizierung anstelle von SimpleDateFormat das ist nicht thread-sicher Übrigens.

Etwas repetitiver, aber mit nur einer Aussage. Dies kann in manchen Fällen praktisch sein.

1 Stimmen

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

1 Stimmen

Für Anfänger: import java.util.Date; und verkünden Date date= new Date(); um dieses Codebeispiel zu vervollständigen. Falls es nicht schon aus der Frage ersichtlich ist.

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