Parsing timestamp con timezone in java?

Sto cercando di analizzare una stringa di data e ora del formato con fuso orario ottenuto da un DB. La stringa è la seguente:

SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSZ"); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); Date d1 = mdyFormat.parse("2014-04-01 15:19:49.31146+05:30"); String mdx = sdf.format(d1); System.out.println(mdx); 

Il problema è che ottengo un errore che dice:

 Exception in thread "main" java.text.ParseException: Unparseable date: "2014-04-01 15:19:49.31146+05:30" at java.text.DateFormat.parse(DateFormat.java:357) at com.karthik.Timestampvalidate.main(Timestampvalidate.java:31) 

Qualcuno sa come risolvere questo problema ?

Devi usare X invece di Z :

 SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSX"); 

Vedi la javadoc per maggiori informazioni.

Nota: disponibile solo in Java 7+.

Se si utilizzano le nuove API data / ora JSR 310 in Java 8, è ansible utilizzare il formato XXX per analizzare il fuso orario. Hai bisogno di tre X s per ottenere lo specifico offset separato da due punti che stai utilizzando.

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSXXX"); TemporalAccessor dateTime = formatter.parse("2014-04-01 15:19:49.31146+05:30"); // returns: {OffsetSeconds=19800},ISO resolved to 2014-04-01T15:19:49.311460