Java SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") proporciona la zona horaria como IST

Resuelto Pradip Borde asked hace 11 años • 9 respuestas

Tengo el constructor SimpleDateFormat como

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")

y estoy analizando la 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 la hora IST para la fecha de devolución.

Ahora mi pregunta es si mi resultado es correcto o incorrecto.

Pradip Borde avatar Oct 01 '13 16:10 Pradip Borde
Aceptado

No ha configurado 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.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Peter Lawrey avatar Oct 01 '2013 11:10 Peter Lawrey

'T'y 'Z'se consideran aquí como constantes. Tienes que pasar Zsin 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"

Subir Kumar Sao avatar Oct 01 '2013 09:10 Subir Kumar Sao

SI desea manejar la representación JSON ' estándar ' de la fecha, entonces es mejor usar este patrón: "yyyy-MM-dd'T'HH:mm:ssX".

Observe el Xfinal. Manejará zonas horarias en el estándar ISO 8601 , y ISO 8601 es exactamente lo que produce esta declaración en Javascript.new Date().toJSON()

En comparación con otras respuestas, tiene algunos beneficios:

  1. No es necesario exigir a sus clientes que envíen la fecha en GMT
  2. No necesitas convertir explícitamente tu objeto Date a GMT usando esto:sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
WelcomeTo avatar Apr 07 '2015 22:04 WelcomeTo

tl; dr

Las otras respuestas están obsoletas a partir de Java 8.

Instant                           // Represent a moment in UTC. 
.parse( "2013-09-29T18:46:19Z" )  // Parse text in standard ISO 8601 format where the `Z` means UTC, pronounces “Zulu”.
.atZone(                          // Adjust from UTC to a time zone. 
    ZoneId.of( "Asia/Kolkata" )
)                                 // Returns a `ZonedDateTime` object. 

ISO 8601

Su formato de cadena cumple con el estándar ISO 8601 . Este estándar define formatos sensibles para representar varios valores de fecha y hora como texto.

java.tiempo

Las antiguas clases java.util.Date/ .Calendary java.text.SimpleDateFormathan sido reemplazadas por el marco java.time integrado en Java 8 y posteriores. Ver Tutorial . Evite las clases antiguas, ya que han demostrado estar mal diseñadas, ser confusas y problemáticas.

Te ha afectado parte del mal diseño de las clases antiguas, 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 en realidad está 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 tanto, no es necesario especificar un patrón de análisis.

An Instantes un momento en la línea de tiempo en UTC .

Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );

Puede aplicar una zona horaria según sea necesario para producir un ZonedDateTimeobjeto.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );

Tabla de tipos de fecha y hora en Java, tanto moderna como heredada

Basil Bourque avatar Mar 09 '2016 07:03 Basil Bourque