Ich möchte ein java.util.Date
Objekt String
in Java in ein konvertieren .
Das Format ist 2010-05-30 22:15:52
java
date
formatting
java.util.date
novicePrgrmr
quelle
quelle
Date
im Jahr 2019. Diese Klasse ist schlecht gestaltet und längst veraltet. Verwenden Sie stattdessenInstant
oder eine andere Klasse aus java.time, der modernen Java-API für Datum und Uhrzeit .Antworten:
Konvertieren Sie ein Datum mit der folgenden Methode in einen String
DateFormat#format
:Von http://www.kodejava.org/examples/86.html
quelle
Calendar
anstelle von einfach verwendennew Date()
? Gibt es einen Unterschied?MM/dd/yyyy
Format ist dumm und kaputt. Benutze es nicht. Verwenden Sie immerdd/MM/yyyy
oderyyyy-MM-dd
.yyyy-MM-dd
überall vorziehen , aber was können Sie tun?).quelle
Commons-lang DateFormatUtils ist voller Goodies (wenn Sie commons-lang in Ihrem Klassenpfad haben)
quelle
null
Prüfung.tl; dr
java.time
Der moderne Weg ist mit den java.time-Klassen, die jetzt die problematischen alten Legacy-Datums- / Uhrzeitklassen ersetzen.
Konvertieren Sie zuerst Ihre
java.util.Date
in eineInstant
. DieInstant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).Konvertierungen in / von java.time werden mit neuen Methoden durchgeführt, die den alten Klassen hinzugefügt wurden.
Sowohl Sie
java.util.Date
als auchjava.time.Instant
sind in UTC . Wenn Sie Datum und Uhrzeit als UTC anzeigen möchten, sollten Sie dies auch tun. Rufen SietoString
auf, um einen String im Standardformat ISO 8601 zu generieren .Für andere Formate müssen Sie Ihre
Instant
in die flexibler umwandelnOffsetDateTime
.Sehen Sie, wie der Code live auf IdeOne.com ausgeführt wird .
Geben Sie a an, um einen String in dem gewünschten Format zu erhalten
DateTimeFormatter
. Sie können ein benutzerdefiniertes Format angeben. Aber ich würde einen der vordefinierten Formatierer (ISO_LOCAL_DATE_TIME
) verwenden und denT
in seiner Ausgabe durch ein Leerzeichen ersetzen .Übrigens empfehle ich diese Art von Format nicht, bei dem Sie absichtlich die UTC-Versatz- oder Zeitzoneninformationen verlieren . Erzeugt Mehrdeutigkeiten hinsichtlich der Bedeutung des Datums- / Uhrzeitwerts dieser Zeichenfolge.
Achten Sie auch auf Datenverlust, da jeder Bruchteil einer Sekunde in der Darstellung des Datums- / Uhrzeitwerts durch Ihren String ignoriert (effektiv abgeschnitten) wird.
Um denselben Moment durch die Linse der Wanduhrzeit einer bestimmten Region zu sehen , wenden Sie a
ZoneId
an , um a zu erhaltenZonedDateTime
.Um einen formatierte String zu erzeugen, tun das gleiche wie oben , aber ersetzen
odt
mitzdt
.Wenn Sie diesen Code sehr oft ausführen, möchten Sie möglicherweise etwas effizienter sein und den Aufruf von vermeiden
String::replace
. Wenn Sie diesen Anruf abbrechen, wird Ihr Code auch kürzer. Wenn gewünscht, geben Sie Ihr eigenes Formatierungsmuster in Ihrem eigenenDateTimeFormatter
Objekt an. Zwischenspeichern Sie diese Instanz als Konstante oder Mitglied zur Wiederverwendung.Wenden Sie diesen Formatierer an, indem Sie die Instanz übergeben.
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Datum Zeitklassen wie
java.util.Date
,.Calendar
, &java.text.SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu java.time.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen.
Ein großer Teil der java.time Funktionalität zurückportiert zu Java 6 und 7 in ThreeTen-Backport und weiter angepasst Android in ThreeTenABP (siehe So verwenden ... ).
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time.
quelle
Z
wird statt+00:00
standardmäßig verwendet. Ich habe die Antwort korrigiert, danke. Zu Ihrer Information, diese bedeuten dasselbe:Z
ausgesprochen „Zulu“ bedeutet einen Versatz von null Stunden-Minuten-Sekunden, genau wie+00:00
. Der ISO 8601- Standard unterstützt beide Stile.atOffset
Methode für dieInstant
Klasse. Siehe Javadoc :Instant::atOffset
. In Java 8 wird ein Aufruf wieInstant.now().atOffset( ZoneOffset.UTC ).toString()
ausgeführt. Überprüfen Sie Ihreimport
Aussagen. Stellen Sie sicher, dass Ihre IDE / Ihr Projekt so eingestellt ist, dass Java 8 oder höher anstelle einer früheren Version von Java ausgeführt wird. Sehen Sie den Code live unter IdeOne.com: ideone.com/2Vm2O5Altenative Einzeiler in einfachem altem Java:
Dies verwendet Formatter und relativen Indexierungs anstelle von
SimpleDateFormat
dem nicht-sicheren fädeln , btw.Etwas repetitiver, braucht aber nur eine Aussage. Dies kann in einigen Fällen nützlich sein.
quelle
Warum benutzt du nicht Joda (org.joda.time.DateTime)? Es ist im Grunde ein Einzeiler.
quelle
DateTime
Objekt die aktuelle Standardzeitzone der JVM zuzuweisen .new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
Es sieht so aus, als ob Sie nach SimpleDateFormat suchen .
Format: JJJJ-MM-TT KK: MM: SS
quelle
HH
(0-23) ist häufiger.In Einzelaufnahme;)
Um das Datum zu erhalten
Um die Zeit zu bekommen
Datum und Uhrzeit abrufen
Viel Spaß beim Codieren :)
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 & Java 9. Siehe Tutorial von Oracle .quelle
Der einfachste Weg, es zu benutzen, ist wie folgt:
Dabei ist "JJJJ-MM-TT'T'HH: MM: SS" das Format des Lesedatums
Ausgabe: So 14. April 16:11:48 EEST 2013
Anmerkungen: HH vs hh - HH bezieht sich auf das 24-Stunden-Zeitformat - hh bezieht sich auf das 12-Stunden-Zeitformat
quelle
Wenn Sie nur die Uhrzeit ab dem Datum benötigen, können Sie einfach die Funktion von String verwenden.
Dadurch wird der Zeitteil des Strings automatisch gekürzt und im gespeichert
timeString
.quelle
Hier sind Beispiele für die Verwendung der neuen Java 8 Time API zum Formatieren von Legacy
java.util.Date
:Es ist schön,
DateTimeFormatter
dass es effizient zwischengespeichert werden kann, da es threadsicher ist (im Gegensatz zuSimpleDateFormat
).Liste der vordefinierten Filter und Referenz der Musternotation .
Credits:
Wie analysiere / formatiere ich Daten mit LocalDateTime? (Java 8)
Java8 java.util.Date Konvertierung in java.time.ZonedDateTime
Sofort zu String formatieren
Was ist der Unterschied zwischen Java 8 ZonedDateTime und OffsetDateTime?
quelle
Versuche dies,
Ausgabe:
Weitere Informationen zur Formatierung von Datum und Uhrzeit in Java finden Sie unter den folgenden Links
Oracle-Hilfe
Beispiel für Datum und Uhrzeit in Java
quelle
quelle
Lass uns das versuchen
Oder eine Utility-Funktion
Vom Konvertierungsdatum in einen String in Java
quelle
quelle
quelle
Einzeilige Option
Mit dieser Option können Sie das aktuelle Datum einfach einzeilig schreiben.
quelle
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .2019-20-23 09:20:22
- Monat 20 ??) (2) Ich kann nicht sehen, dass die Antwort etwas enthält, das nicht bereits in anderen Antworten behandelt wird. (3) Bitte bringen Sie den Jungen nicht bei, die lange veraltete und notorisch problematischeSimpleDateFormat
Klasse zu benutzen . Zumindest nicht als erste Option. Und das nicht ohne Vorbehalt. Heute haben wir so viel besser injava.time
der modernen Java-API für Datum und Uhrzeit und derenDateTimeFormatter
.