Husos horarios

Responder
jlegarda
Mensajes: 2
Registrado: 21 Sep 2011, 19:33

Husos horarios

Mensaje por jlegarda » 29 Oct 2017, 10:17

Hola
Con el cambio de hora, $datim retrocede en el tiempo.
Tenemos un servicio que se ejecuta en el servidor y que registra la hora usando $datim. Nos encontramos con que con el cambio de hora, ha recorrido el periodo de 2:00am-3:00am dos veces.
Hay forma de corregir esto?. Vi que existe $nlstimezone pero no lo hemos usado nunca.

gracias

luis.vila
Mensajes: 194
Registrado: 17 Sep 2011, 12:46

Re: Husos horarios

Mensaje por luis.vila » 29 Oct 2017, 12:02

Hola

Existen una serie de funciones/parametrizaciones que permiten resolver esas situaciones. Por defecto, $datim y demás, devuelven la hora del ordenador donde se ejecutan. No es un tema trivial y se ve afectado por el cambio de hora pero también cuando usuarios de diferentes husos horarios colaboran dentro de la aplicación (este evento ha ocurrido a las 9:00 ¿tus 9:00 o mis 9:00?).

$nlstimezone y $NLS_TIME_ZONE permiten definir el huso horario a utilizar al mostrar los datos al usuario. Lo lógico es utilizar el huso horario definido en el propio ordenador del usuario. Ése es el comportamiento por defecto.

Por otro lado, está el tándem $nlsinternaltime y $NLS_INTERNAL_TIME que definen el huso horario a utilizar internamente. Qué huso horario utilizar al guardar el dato en base de datos.

Por ejemplo, se puede especificar que siempre se muestre la hora local al usuario pero se guarde la hora del meridiano de Greenwich.

En vuestro caso, podríais definir en el ASN $NLS_INTERNAL_TIME = UTC, o cambiarlo en el propio servicio $nlsinternaltime = "UTC". O hacer algo como esto:

Código: Seleccionar todo

;se pasa a hora zulú
VCZONE = $nlstimezone
$nlstimezone = "zulu"

;$datim devolverá siempre la hora del meridiano de Greenwich (+00:00)

;se restaura el huso horario anterior para que no afecte a otros servicios
$nlstimezone = VCZONE

Es importante reseñar que esa conversión también aplica cuando se exportan/importan datos con XML. Ya sea porque un servicio es publicado como webservice o se llama a un webservice externo, o porque se ejecuta un xmlsave o structtoxml... el dato timestamp es convertido de huso horario usando estas parametrizaciones.


Interesante: https://www.youtube.com/watch?v=-5wpm-gesOY

Humor: https://www.youtube.com/watch?v=poQ2eYgRSEY (explicación si no recibiste educación en España. Los mapas de geografía de los colegios en España siempre representan a las islas Canarias dentro de un recuadro al sureste de la península Ibérica cuando realmente están a unos 1000km al suroeste. El que habla fue Ministro)

$status=0 ; se acabaron los problemas

Responder