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/UTC
zona 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
Z
al 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 pasarZ
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"
fuente
-0700
es 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 2013
De Java Date Object a ISO 8601 String
Y para convertir
Date
objetos 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:ssZ
2015-01-22T03:41:02+0000
fuente
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
X
al 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
play
el enlace automático de formulario y uso@Format.DateTime
anotaciones. El uso del patrón predeterminado conZ
al 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
/.Calendar
y lasjava.text.SimpleDateFormat
clases 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
toString
mé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
Instant
es un momento en la línea de tiempo en UTC .Puede aplicar una zona horaria según sea necesario para producir un
ZonedDateTime
objeto.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.DateTimeFormatter
para 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