In base allo SimpleDateFormat class documentation, Java
non supporta la granularità del tempo al di sopra dei millisecondi nei suoi schemi di data.Analisi della data Java con precisione al microsecondo o al nanosecondo
Quindi, una stringa data come
- 2015-05-09 00: 10: 23.999750900 // Le ultime 9 cifre denotano nanosecondi
quando analizzato tramite il modello
- aaaa-MM-gg HH: mm: ss.SSSSSSSSS // 9 simboli 'S'
realtà interpreta l'intero numero dopo il simbolo .
come (quasi 1 miliardo!) Millisecondi e non come nanosecondi, con conseguente data
- 2015-05-20 21:52:53 UTC
cioè oltre 11 giorni prima. Sorprendentemente, l'utilizzo di un numero inferiore di simboli S
produce ancora l'analisi di tutte e 9 le cifre (anziché, ad esempio, il 3 più a sinistra per .SSS
).
Ci sono 2 modi per gestire correttamente questo problema:
- Usa stringa di pre-elaborazione
- Uso un'implementazione SimpleDateFormat personalizzato
Ci sarebbe qualche altro modo per ottenere una soluzione corretta, semplicemente fornendo un modello all'implementazione standard , senza altre modifiche al codice o manipolazione delle stringhe?
* ... semplicemente fornendo un modello all'implementazione standard 'SimpleDateFormat', senza altre modifiche al codice o manipolazione di stringhe? * Ovviamente no. –
Sì, sembra così. – PNS