Frage

Ich will ein Date-Objekt in eine lesbare Zeichenfolge speichern (zB 22/10/2009 21.13.14), die auch wieder zu einem Date-Objekt ist geparst.

Ich habe viele Dinge ausprobiert, und das Beste, was ich finden konnte, ist DateFormater für das Parsen und Formatieren zu verwenden, aber es hat einen Rückschlag. Wenn Sie ein Datum formatieren Sie verlieren Sekunden Informationen. Ich habe versucht zu finden, wenn es eine Option ist es zu formatieren und die Sekunden angezeigt werden (noch besser auf die Millisekunde Ebene wäre, da, dass die Auflösung ist das Date-Objekt Sie haben kann), aber ich kam zu kurz.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Hier finden Sie aktuelle java.text.SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back

Andere Tipps

SimpleDateFormat können formatieren und analysieren ein Datum basiert auf einem sehr einfachen Muster-System, das zweite und sogar Millisekunden umfassen.

Andere Antworten sind alle gut.

Aber wenn diese Art der Sache zu tun Sie ein Format auswählen, die Sorten richtig , wenn als String codiert .... „yyyy / MM / TT HH: mm: ss“ist in Ordnung. Es erstaunt mich immer wieder, wenn Software-Ingenieure ein Datumsformat auswählen, die in der Hand, bequeme Art und Weise sortiert nicht.

Sie werden Ihre andere Entwickler eine Menge Schmerzen an einem fernen Punkt in der Zukunft retten - man denke an es als gutes Karma: -)

Ein wenig Off-Topic, aber ich fühle mich immer die Notwendigkeit, die Menschen daran zu erinnern, dass Dateformat und Simple sind nicht Thread-sicher! Die Sun-Dokumentation wird klar, aber ich halte Code in der Wildnis zu finden, wo Menschen eine Simple in einem statischen Stick ...

ISO 8601

Verwenden Sie ISO 8601 Format.

  • Es ist flexibel, es Sekunden und Sekundenbruchteil enthält, wenn es welche gibt, aber man kann sie auch weglassen, wenn sie 0 sind.
  • Es ist Standard, so dass mehr und mehr Tools Format und analysiert es. Groß für die Serialisierung für die Lagerung oder den Datenaustausch.
  • Es ist wie 2009-10-22T21:13:14 geht, sollte ich sagen, es ist ziemlich menschenlesbare (obwohl die T in der Mitte, die den Beginn des Zeit Teil bezeichnet kann zuerst ungewohnt).
  • Die Saiten richtig sortieren, wie mikera in eine andere Antwort , solange die Jahre in der vierstelligen sind Bereich von 1000 bis 9999.
  • Die Klassen von java.time, die moderne Java-Datum und Uhrzeit API, sowie diejenigen von Joda Zeit Parse ISO 8601 als Standard, das heißt, ohne explizite Formatierer und produzieren das gleiche Format von ihren toString Methoden.

Eine bescheidene Demonstration der Verwendung java.time:

LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);

Diese druckt zwei identische Zeilen:

2009-10-22T21:13:14
2009-10-22T21:13:14

Dieser System.out.println() Aufruf implizit ruft toString() noch einmal, so sollte dies nicht überraschen.

Wenn Sie es ein wenig einfacher machen wollen, und machen Sie Ihre eigene Date verschont werden, die die meisten anderen Antworten beinhalten, können Sie das Standardformat nutzen, in java.time.Instant :

(new Date()).toInstant.toString();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top