Te recomendamos que pruebes esta resolución en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
Etc./GMT es no estrictamente lo mismo que UTC o GMT. Representan el mismo instante en el tiempo solo cuando el desplazamiento es 0. En todos los demás casos, son bastante diferentes.
Apple explica la designación aquí.
Una cita directamente del enlace da un ejemplo:
Usamos signos de estilo POSIX en los nombres de las zonas y las abreviaturas de salida, aunque esto es lo contrario de lo que mucha gente espera. POSIX tiene señales positivas al oeste de Greenwich, pero muchas personas esperan señales positivas al este de Greenwich. Por ejemplo, TZ=’Etc/GMT+4′ usa la abreviatura “GMT+4” y corresponde a 4 horas por detrás de UTC (es decir, al oeste de Greenwich), aunque muchas personas esperarían que significara 4 horas por delante de UTC (es decir, al este de Greenwich).
Etc/GMT
es solo una forma estándar de decir UTC
, GMT
, GMT0
o GMT+00:00
.
Java JDK comprende todos los formatos. Puede ver esto fácilmente en acción haciendo lo siguiente:
import java.util.TimeZone;
public class Playground
public static void main(String... args)
for (String s : TimeZone.getAvailableIDs())
System.out.println(s);
Esto imprimirá todos los diferentes TimeZone
formatos que su Java JDK puede analizar:
…
Etc/GMT
Etc./GMT+0
Etc./GMT-0
Etc./GMT0
Etc./Greenwich
Etc./UCT
Etc/UTC
Etc./Universal
…
Compensación frente a zona
Entender:
- Un desplazamiento desde UTC es simplemente un número de horas, minutos y segundos, por delante de la línea base de UTC o por detrás de UTC.
- Una zona horaria es mucho más. Una zona horaria es un historial de los cambios pasados, presentes y futuros en el desplazamiento utilizado por las personas de una región en particular.
Numeración positiva versus negativa
Los diferentes protocolos en varias industrias han variado en su numeración, y algunos consideran compensaciones adelante de UTC para ser números positivos mientras que otros usaron negativos. Simétricamente, algunos consideraron compensaciones detrás UTC para ser negativo mientras que otros usaron positivo.
En la mayoría de los protocolos modernos que he visto, como el ISO 8601, las compensaciones por delante de UTC (hacia el este) son positivas, mientras que las compensaciones por detrás de UTC (hacia el oeste) son negativas. Entonces, las compensaciones utilizadas por las zonas en las Américas tienen números negativos como America/Los_Angeles
teniendo una compensación de -07:00
o -08:00
en la actualidad (varía durante el año debido al horario de verano (DST)).
Le sugiero que aprenda a pensar de esta manera (la derecha de UTC es positiva, la izquierda de UTC es negativa) como la corriente principal y lo contrario como una variación menor y molesta.
Los nombres de las zonas horarias generalmente tienen el formato Continent/Region
tal como America/Edmonton
, Europe/Paris
, Africa/Tunis
, Asia/Kolkata
y Pacific/Auckland
. Consulte esta lista en Wikipedia (puede que no esté actualizada). Hay algunas excepciones. los Etc/GMT…
los nombres llevan la convención más/menos opuesta:
Etc/GMT+1
=-01:00
desplazamiento = una hora detrás UTCEtc/GMT+12
=-12:00
desplazamiento = Doce horas detrás UTC
…y…
Etc/GMT-1
=+01:00
desplazamiento = una hora antes de UTCEtc/GMT-12
=+12:00
desplazamiento = Doce horas antes de UTC
¿Confuso? Bienvenido al alocado mundo del manejo de fecha y hora. Solo se vuelve más extraño desde aquí.
Puntos clave:
- Comprender el significado y las intenciones de aquellas personas que publican datos. Nunca asuma el significado de una entrada string.
- Utilizar java.tiempo clases solo para todo su trabajo de fecha y hora. Nunca uses las terribles clases heredadas
java.util.Date
,Calendar
,SimpleDateFormat
y tal.
Afortunadamente el java.tiempo Las clases pueden ayudarte a superar este lío. Vea la respuesta correcta de Ole VV usando el ZoneId
clase.
Tus preguntas
justificación detrás de Apple usando la zona horaria Etc/GMT
Significan una compensación de cero, UTC en sí. los string Etc/GMT
es una etiqueta canónica para un desplazamiento desde UTC de cero horas, minutos y segundos.
La carta Z
(pronunciado “Zulu”) que se ve comúnmente al final de las cadenas de fecha y hora significa lo mismo, una compensación de cero.
¿Cuál es exactamente la zona horaria Etc/GMT?
los string Etc/GMT
es el nombre de una zona horaria que solo ha tenido una diferencia con respecto a UTC, una diferencia de cero horas, minutos y segundos.
La mayoría de las otras zonas horarias, como Europe/Berlin
o Africa/Casablanca
han variado en su compensación a lo largo de la historia. Por ejemplo, en ese Africa/Casablanca
en Marruecos, los políticos decidieron el año pasado que, en lugar de cambiar una hora dos veces al año por la hora estándar y el horario de verano, ahora permanecerán permanentemente en el horario de verano durante todo el año. Digo “permanentemente” con una risita, ya que eso realmente significa “hasta que los políticos cambien de opinión nuevamente”. Los políticos de todo el mundo han mostrado una inclinación por redefinir sus zonas horarias con una frecuencia sorprendente.
¿El SDK de Java comprende esta zona horaria?
Si. Vea la respuesta de Ole VV: ZoneId.of( "Etc/GMT" )
¿O tengo que usar otras bibliotecas de terceros como Joda-Time?
para su información, el Joda-Tiempo El proyecto está ahora en modo de mantenimiento, aconsejando la migración a la java.tiempo clases Ver Tutorial de Oracle.
deberías estar usando java.tiempo clases para todo su manejo de fecha y hora.
Comentarios y puntuaciones del post
Tienes la opción de asistir nuestro ensayo añadiendo un comentario y dejando una puntuación te damos la bienvenida.