Die Art und Weise Java Zeit behandelt einfache Dinge wie Zeitstempel macht mich ein wenig verblüfft. Vielleicht mache ich es falsch.Java Zeit Instant Formatierung Diskrepanzen
Ich möchte eine ISO 8601 Timestamp-Zeichenfolge generieren. Der naheliegende Weg wäre, ein Instance.now()
zu erstellen und es zu formatieren, verwenden Sie DateTimeFormatter.ISO_INSTANT
, um es zu formatieren. Außer dass Instance
keine format()
Methode hat, kann ich es nicht mit dem Formatierer "instance" formatieren. Stell dir das vor.
Also muss ich eine ZonedDateTime
aus der Instanz erstellen. Es sollte keine Rolle spielen, welche Zone ich wählen, so dass ich wählen UTC weil das ist, was DateTimeFormatter.ISO_INSTANT
wird, um es in irgendeiner Weise:
Instant.now().atZone(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)
Jetzt bekomme ich einen String zurück, und natürlich will ich es ein zurück zu bekommen ZonedDateTime
Beispiel, denn das habe ich mit dem Format formatiert! Also versuche ich:
ZonedDateTime.parse(timestamp, DateTimeFormatter.ISO_INSTANT)
Es befindet sich auf mich beschwert, dass es keine Informationen Zeitzone ist. Aber ich habe eine ZonedDateTime
verwendet, um es zu erzeugen --- es ist nicht meine Schuld, dass es mich nicht Instance
verwenden ließ, um es zu formatieren.
Seltsamer Instance
hat keine format()
Methode, aber es hat eine parse()
Methode, die wiederum seltsam, analysiert wird mit DateTimeFormatter.ISO_INSTANT
(obwohl ich kann nicht Format ein Instance
dass Formatierer verwenden).
Wie in den Kommentaren darauf hingewiesen, kann ich DateTimeFormatter.ISO_INSTANT.format(Instance.now())
verwenden, um eine Instanz direkt zu formatieren, also warum gibt es keine Instance.format(…)
?
Also nur ein Timestamp zu generieren und zu analysieren scheint gefaltet und inkonsistent. Oder mache ich es falsch?
Sie passieren kann 'Instant' zu' DateTimeFormatter.ISO_INSTANT.format (...) ', können Sie nicht? – lexicore
Ah, in der Tat kann ich! Mir fehlte die gesamte 'DateTimeFormatter.format (...)' Methode. Dennoch ist es seltsam, dass 'Instant' keine' format (...) 'Methode hat, wenn es mit' DateTimeFormatter.format (...) 'arbeitet. Und dann wird das andere Problem sogar eine größere Inkonsistenz: Ich kann 'DateTimeFormatter.ISO_INSTANCE' verwenden, um eine' Instanz' zu formatieren, aber nicht um sie zurück zu analysieren! –