Tengo el constructor SimpleDateFormat como
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
y estoy analizando una cadena "2013-09-29T18:46:19Z".
He leído que aquí Z representa la GMT/UTCzona horaria. pero cuando imprimo esta fecha en la consola, imprime IST timezne para la fecha devuelta.
Ahora mi pregunta es si mi salida es correcta o incorrecta.
java
date
timezone
date-format
simpledateformat
Pradip Borde
fuente
fuente

Respuestas:
No ha establecido la zona horaria solo agregó un
Zal 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.
fuente
'T'y'Z'se consideran aquí como constantes. Necesitas pasarZsin las comillas. Además, debe especificar la zona horaria en la cadena de entrada.Ejemplo:
2013-09-29T18:46:19-0700y el formato como"yyyy-MM-dd'T'HH:mm:ssZ"fuente
-0700es la zona horaria, es decir, -7: 00 horasDe la cadena ISO 8601 al objeto de fecha Java
si no lo configura
TimeZone.getTimeZone("GMT"), se generaráSun Sep 29 18:46:19 CST 2013De Java Date Object a ISO 8601 String
Y para convertir
Dateobjetos al estándar ISO 8601 (yyyy-MM-dd'T'HH:mm:ss'Z') use el siguiente códigoTambién tenga en cuenta que sin impresiones
' 'en Zyyyy-MM-dd'T'HH:mm:ssZ2015-01-22T03:41:02+0000fuente
SI desea manejar ' estándar de representación' JSON de la fecha a continuación, mejor utilizar este patrón:
"yyyy-MM-dd'T'HH:mm:ssX".Observe el
Xal final. Manejará zonas horarias en el estándar ISO 8601 , e ISO 8601 es exactamente lo que produce esta declaración en Javascriptnew Date().toJSON()En comparación con otras respuestas, tiene algunos beneficios:
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));fuente
playel enlace automático de formulario y uso@Format.DateTimeanotaciones. El uso del patrón predeterminado conZal final parece ser incorrecto. Después de cambiar aX, funciona. Muchas graciastl; dr
Las otras respuestas están pasadas de moda a partir de Java 8.
ISO 8601
Su formato de cadena cumple con la norma ISO 8601 . Este estándar define formatos sensibles para representar varios valores de fecha y hora como texto.
java.time
Las antiguas
java.util.Date/.Calendary lasjava.text.SimpleDateFormatclases han sido suplantadas por el marco java.time integrado en Java 8 y versiones posteriores. Ver tutorial . Evite las clases antiguas, ya que han demostrado ser mal diseñadas, confusas y problemáticas.Parte del diseño deficiente en las clases antiguas lo ha mordido, donde el
toStringmétodo aplica la zona horaria predeterminada actual de la JVM al generar una representación de texto del valor de fecha y hora que está realmente en UTC (GMT); bien intencionado pero confuso.Las clases java.time utilizan formatos ISO 8601 de forma predeterminada al analizar / generar representaciones textuales de valores de fecha y hora. Por lo tanto, no es necesario especificar un patrón de análisis.
Un
Instantes un momento en la línea de tiempo en UTC .Puede aplicar una zona horaria según sea necesario para producir un
ZonedDateTimeobjeto.fuente
y si no tiene la opción de usar java8, mejor use 'aaaa-MM-dd'T'HH: mm: ssX XX ' ya que esto se analiza correctamente nuevamente (mientras que con solo una X esto puede no ser el caso. .. dependiendo de su función de análisis)
X genera: +01
XXX genera: +01: 00
fuente
Para Java 8: puede usar incorporado
java.time.format.DateTimeFormatterpara reducir cualquier posibilidad de errores tipográficos, comoISO_ZONED_DATE_TIME representa
2011-12-03T10:15:30+01:00[Europe/Paris]es uno de los formatos estándar de fecha y hora incluidos que proporciona el enlace de Oraclefuente