Ich möchte eine java.util.Date
Objekt zu einem String
in Java.
Das Format ist 2010-05-30 22:15:52
Ich möchte eine java.util.Date
Objekt zu einem String
in Java.
Das Format ist 2010-05-30 22:15:52
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);
Das Format Ihrer Antwort entspricht nicht dem, wonach der Auftraggeber gefragt hat. Außerdem ist es komplizierter als es sein müsste.
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
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 );
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.
Hier sind Code-Beispiele für die Formatierung mit Java 8 Time API: stackoverflow.com/a/43457343/603516
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!
@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.
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.
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.
2 Stimmen
Ähnliche Frage: stackoverflow.com/questions/4772425/format-date-in-java
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 stattdessenInstant
oder eine andere Klasse aus java.time, die moderne Java-API für Datum und Uhrzeit .