Solución:
No estableciste la zona horaria, solo agregaste un Z
hasta el final de la fecha / hora, por lo que se verá como una fecha / hora GMT, pero esto no cambia el valor.
Establezca la zona horaria en GMT y será correcta.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
'T'
y 'Z'
se consideran aquí como constantes. Tienes que pasar Z
sin las comillas. Además, debe especificar la zona horaria en la cadena de entrada.
Ejemplo : 2013-09-29T18:46:19-0700
Y el formato como "yyyy-MM-dd'T'HH:mm:ssZ"
De la cadena ISO 8601 al objeto de fecha Java
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
sdf.parse("2013-09-29T18:46:19Z"); //prints-> Mon Sep 30 02:46:19 CST 2013
si no te pones TimeZone.getTimeZone("GMT")
entonces saldrá Sun Sep 29 18:46:19 CST 2013
Desde el objeto de fecha Java a la cadena ISO 8601
Y convertir Date
objetar a la norma ISO 8601 (yyyy-MM-dd'T'HH:mm:ss'Z'
) usa el siguiente código
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(new Date())); //-prints-> 2015-01-22T03:23:26Z
También tenga en cuenta que sin ' '
en Z yyyy-MM-dd'T'HH:mm:ssZ
huellas dactilares 2015-01-22T03:41:02+0000