Ich möchte a konvertieren java.util.Date
widersprechen a String
auf Java.
Das Format ist 2010-05-30 22:15:52
NovizePrgrmr
Ich möchte a konvertieren java.util.Date
widersprechen a String
auf Java.
Das Format ist 2010-05-30 22:15:52
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);
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
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
Basil Bourque
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 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 );
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.
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
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
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
Ä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 stattdessenInstant
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