Gemäß der SimpleDateFormat class documentation unterstützt Java
keine Zeitgranularität über Millisekunden in seinen Datumsmustern.Java-Datumsanalyse mit Mikrosekunden- oder Nanosekundengenauigkeit
Also, ein Datum Zeichenfolge wie
- 2015-05-09 00: 10: // 23,999750900 Die letzten 9 Ziffern bezeichnen ns
, wenn sie über das Muster analysiert
- JJJJ-MM-TT HH: mm: ss.SSSSSSSSS // 9 'S'-Symbole
interpretiert tatsächlich die ganze Zahl nach dem .
Symbol als (fast 1 Milliarde!) Millisekunden und nicht als Nanosekunden, in dem Datum resultierenden
- 2015-05-20 21:52:53 UTC
dh über 11 Tage im Voraus. Überraschenderweise führt die Verwendung einer kleineren Anzahl von S
Symbolen immer noch dazu, dass alle 9 Ziffern analysiert werden (anstelle von beispielsweise der am weitesten links liegenden 3 für .SSS
).
Es gibt 2 Möglichkeiten richtig um dieses Problem zu umgehen:
- Verwenden String Vorverarbeitung
- Verwenden Sie eine benutzerdefinierte Simple Implementierung
Gäbe es eine andere Möglichkeit, eine richtige Lösung nur für das Erhalten Liefern ein Muster an die Standard SimpleDateFormat
Implementierung, ohne weitere Code-Modifikationen oder String-Manipulation?
* ... indem Sie einfach ein Muster an die Standard-'SimpleDateFormat'-Implementierung übergeben, ohne weitere Code-Modifikationen oder String-Manipulation? * Offensichtlich nicht. –
Ja, so scheint es. – PNS