2015-09-21 4 views
5

Ich möchte Instanzen der Klasse java.time.Instant zu und von Strings konvertieren.Wie erstellt man eine benutzerdefinierte Variante des DateTimeFormatter ISO_INSTANT, die keine Doppelpunkte verwendet?

Ich möchte ein Format genau wie java.time.format.DateTimeFormatter.ISO_INSTANT mit dem einzigen Unterschied, dass die Doppelpunkte im Format weggelassen oder durch Punkte ersetzt werden, so dass sie verwendet werden können, ohne in Dateinamen und URLs zu entkommen.

Beispiel: 2011-12-03T10.15.30.001Z statt 2011-12-03T10: 15: 30.001Z

Siehe Javadoc für ISO_INSTANT: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT

+0

Es ist wahrscheinlich nicht trivial, weil ISO_INSTANT java.time.format.DateTimeFormatterBuilder.InstantPrinterParser verwendet und der Doppelpunkt dort fest codiert ist. – Gustave

+3

Sie haben immer 'input.replace (". ",": ");' ... Es ist wahrscheinlich so gut wie ein komplexes Formatierprogramm für Datumszeit. – assylias

+0

Ja, das ist die pragmatische aber sehr unelegante Lösung, die ich jetzt benutze, bis ich etwas Besseres finde. – Gustave

Antwort

1

Sie könnten Ihren eigenen Formatierer wie dieses bauen :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH.mm.ss.SSSVV") 

Die DateTimeFormatter Javadoc listet alle möglichen Token mit ihrer Bedeutung.

+0

Ich denke, das ist nicht genug, weil ISO_INSTANT immer UTC verwendet und keine Bruchteils Sekunden hat, wenn nicht benötigt. – Gustave

+1

DateTimeFormatter.ofPattern ("yyyy-MM-dd'T'HH.mm.ss.SSV") löst java.lang.IllegalArgumentException aus: Die Anzahl der Musterbuchstaben muss 2 sein: V – Gustave

+2

DateTimeFormatter.ofPattern ("yyyy-MM-dd ' T'HH.mm.ss.SSVV "). Format (Instant.EPOCH) erzeugt java.time.temporal.UnsupportedTemporalTypeException: Nicht unterstütztes Feld: YearOfEra – Gustave

Verwandte Themen