2016-06-13 6 views
0

ich die String-Daten "2016-06-08T10:27:17.369000000000Z", mitjava Simple Parse millis Formatfehler

import java.text.SimpleDateFormat 

import scala.util.Try 
object TimeParse extends App { 
    val raw = "2016-06-08T10:27:17.369000000000Z" 
    private def parseDate(inputdate: String) = { 
    val fromUser = new SimpleDateFormat("""yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSSSS'Z'""") 
    val myFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss") 
    Try(myFormat.format(fromUser.parse(inputdate))) 
    } 

    val r = parseDate(raw) 
    println("r - " + r) 
} 

Aber Ausgabe analysieren wollen:
r - Success(2016年06月04日 04:27:29)

Wenn ich millis Format entfernen, wird es richtig sein, wie folgt aus:

object TimeParse extends App { 
    val raw = "2016-06-08T10:27:17Z" 
    private def parseDate(inputdate: String) = { 
    val fromUser = new SimpleDateFormat("""yyyy-MM-dd'T'HH:mm:ss'Z'""") 
    val myFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss") 
    Try(myFormat.format(fromUser.parse(inputdate))) 
    } 

    val r = parseDate(raw) 
    println("r - " + r) 
} 

Ausgang:
r - Success(2016年06月08日 10:27:17) warum Millisekunde wird ein Fehler Ergebnis erhalten?

Antwort

2

Nun, die SimpleDateFormat nicht die Sekunden und Millisekunden Werte als Dezimalzahl.

Es verarbeitet sie separat, und daher 17.369000000000 ist nicht 17 Sekunden und 369 Millisekunden, sondern 17 Sekunden und 369_000_000_000 Millisekunden.

wird der Millisekundenwert dann abgeschnitten daher auf int und als -367_187_456 Millisekunden interpretiert wird, die zu Ihrem Datum Wert addiert wird (2016-06-08T10: 27: 17) und so erhalten Sie einen Zeitstempel, der vor Ihrem eigentlichen ist Datum.

Siehe java.util.Date format SSSSSS: if not microseconds what are the last 3 digits?

+0

ich plötzlich traf auf auch, wie sich 369_000_000_000 abgeschnitten kann -367_187_456? – LoranceChen

+0

@LananceChen SimpleDateFormat liest diese Zahl als long-Wert und konvertiert sie dann in int (etwas wie 'System.out.println ((int) 369_000_000_000L);', das '-367187456' ausgibt) –