2015-09-21 9 views
5

Vorrei convertire le istanze della classe java.time.Instant da e verso le stringhe.Come creare una variante personalizzata di ISO_INSTANT DateTimeFormatter che non utilizza i due punti?

Vorrei utilizzare un formato esattamente come java.time.format.DateTimeFormatter.ISO_INSTANT con la sola differenza che i due punti nel formato vengono omessi o sostituiti da punti in modo che possano essere utilizzati senza eseguire l'escape nei nomi di file e URL.

Esempio: 2011-12-03T10.15.30.001Z invece di 2011-12-03T10: 15: 30.001Z

See Javadoc per ISO_INSTANT: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT

+0

Probabilmente non è banale, perché ISO_INSTANT utilizza java.time.format.DateTimeFormatterBuilder.InstantPrinterParser e il colon è hardcoded lì. – Gustave

+3

Si usa sempre 'input.replace (". ",": ");' ... Probabilmente è buono come un formattatore di data e ora complesso. – assylias

+0

Sì, questa è la soluzione pragmatica ma molto poco elegante che sto usando ora finché non trovo qualcosa di meglio. – Gustave

risposta

1

Si potrebbe costruire il proprio formattatore come questo :

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

I DateTimeFormatter liste Javadoc tutte le possibili gettoni con il loro significato.

+0

Penso che questo non sia sufficiente, perché ISO_INSTANT usa sempre UTC e non ha secondi frazionari se non è necessario. – Gustave

+1

DateTimeFormatter.ofPattern ("yyyy-MM-dd'T'HH.mm.ss.SSSV") genera java.lang.IllegalArgumentException: Il conteggio delle lettere del modello deve essere 2: V – Gustave

+2

DateTimeFormatter.ofPattern ("yyyy-MM-dd ' T'HH.mm.ss.SSSVV "). Format (Instant.EPOCH) produce java.time.temporal.UnsupportedTemporalTypeException: campo non supportato: YearOfEra – Gustave

Problemi correlati