2013-11-23 4 views
27

Gradirei qualsiasi aiuto nel trovare bug per questa eccezione:java.text.ParseException: di analizzarlo data "yyyy-MM-dd'T'HH: mm: ss.SSSZ" - SimpleDateFormat

java.text.ParseException: Unparseable date: "2007-09-25T15:40:51.0000000Z" 

e codice seguente:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
Date date = sdf.parse(timeValue); 
long mills = date.getTime(); 
this.point.time = String.valueOf(mills); 

getta expcetion con Date date = sdf.parse(timeValue);.

timeValue = "2007-09-25T15:40:51.0000000Z";, come nell'eccezione.

Grazie.

+0

Hai anche bisogno di analizzare per '.SSSZ'? Se tutto ciò che vuoi è data o ora, quindi rimuovere il '.SSSZ'. –

risposta

57

Z rappresenta il carattere del fuso orario. Ha bisogno di essere citato:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
+1

O possibilmente usare X invece di Z in modo che Z sia accettato come fuso orario ISO8601, per il quale "Z" viene analizzato come la designazione del fuso orario UTC – DNA

+0

Usando 'X' si genera un' ParseException' anche se è quotato .. – Reimeus

+0

L'uso di X funziona per me, MA sembra richiedere un numero esatto di S (millisecondi) caratteri nei motivi, il che è strano - vedi la mia risposta ... – DNA

3

In Java 7 è anche possibile utilizzare il modello X per corrispondere a un fuso orario ISO8601, che comprende il Z valore speciale (UTC):

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX"); 
Date date = sdf.parse("2007-09-25T15:40:51.0000000Z"); 

Tuttavia, sembra richiedono un numero esatto di caratteri millisecondi nel modello, che non è richiesto per il modello di carattere "Z", ed è piuttosto scomodo. Penso che questo sia dovuto al fatto che la definizione ISO8601 include anche "ore a due cifre", che sono solo numeri, quindi non può essere distinta dal parser dei millisecondi precedenti.

Quindi questa versione andrebbe bene per i timestamp fino alla seconda precisione, meno per i millisecondi.

+0

'IllegalArgumentException: carattere pattern sconosciuto 'X'' –

+1

Igor - quale versione di Java fornisce errore? Il pattern "X" è [chiaramente documentato] (https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) per Java 7 e funziona anche per me con Java 8. – DNA

+0

Sto usando la libreria ThreeTenABP nel mio progetto Android (Java 8). –