|
Página 1 de 1
|
Convertir Una Fecha-hora De Hora UTC A Hora Local
Autor |
Mensaje |
gatoviejo
Usuario
Registrado: Septiembre 2012
Mensajes: 20
Edad: 63 Ubicación: Barcelona
|
Convertir Una Fecha-hora De Hora UTC A Hora Local
Ante todo, Feliz Navidad a todos.
Me encuentro con problema que no sé si es que estoy bloqueado, pero no encuentro la forma de resolverlo. El caso es que me llega un fichero con fechas-horas en UTC y las tengo que convertir a hora local.
Según la especificación, el formato de la de la fecha-hora sigue la norma ISO8601, es decir, yyyy-mm-ddThh:mm:ssZ
(por ejemplo: 2012-06-17T06:34:53Z)
¿Como puedo convertirla a hora local? El caso del ejemplo, tengo que mostrar por pantalla 17-06-2012 08:34:53 ya que estamos en horario de verano y son 2 horas más.
He visto ejemplos de como obtener la hora UTC actual con date -u directamente del sistema operativo. No sé si la solución puede ir por el mismo camino.
Gracias por las respuestas.
|
#1 Lunes, 23 Diciembre 2013, 18:21 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Convertir Una Fecha-hora De Hora UTC A Hora Local
gatoviejo:
Citar:
¿Como puedo convertirla a hora local? El caso del ejemplo, tengo que mostrar por pantalla 17-06-2012 08:34:53
A ver si te sirve asi:
Citar:
print format(now,"dd-mm-yyyy hh:nn:ss")
Mirate el comando format para ver más opciones http://gambasdoc.org/help/cat/userformat?es&v3
Saludos
|
#2 Lunes, 23 Diciembre 2013, 20:10 |
|
|
gatoviejo
Usuario
Registrado: Septiembre 2012
Mensajes: 20
Edad: 63 Ubicación: Barcelona
|
Re: Convertir Una Fecha-hora De Hora UTC A Hora Local
Veo que no me he sabido explicar. Me llega un fecha-hora en hora UTC (hora solar, hora de Greenwhich, hora GMT u hora zulú, tiene diversas denominaciones) y lo tengo que convertir a hora local, que en España es +1 hora en invierno y +2 horas en verano.
La fecha puede ser cualquiera, por lo que no sirve la diferencia dada por la propiedad System.TimeZone de gambas, por ejemplo, ya que es la diferencia del momento, no de cualquier fecha.
La referencia que tengo es la función convert_tz de mysql:
Citar: convert_tz('2013-08-24 13:14:23', 'UTC', 'Europe/Madrid')
2013-08-24 15:14:23
convert_tz('2013-11-24 13:14:23', 'UTC', 'Europe/Madrid')
2013-11-24 14:14:23
Luego, la visualización sí se puede hacer con el comando format.
|
#3 Martes, 24 Diciembre 2013, 13:27 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Convertir Una Fecha-hora De Hora UTC A Hora Local
Vale, entonces lo que te tienes que crear es la funcion que haga que añada las horas segun sea horario de verano o de invierno. Algo asi como esto:
Nota:
033002: significa el mes de marzo dia 30, a las 02:00 horas
102703: significa el mes de octubrre dia 27, a las 03:00 horas.
Asi averiguo si estoy en "verano" o "invierno".
Comprueba si asi se convierten todas las horas bien..
Y usala en tu programa
Public Sub Form_Open()
Dim fechaW As Date
fechaW = Date(2013, 8, 24, 13, 14, 23)
Print "Fecha GreenWich:", Format$(fechaW, "dd-mm-yyyy hh:nn:ss")
Print "Fecha Madrid:", Format$(cambioTZ(fechaW), "dd-mm-yyyy hh:nn:ss")
fechaW = Date(2013, 11, 24, 13, 14, 23)
Print "Fecha GreenWich:", Format$(fechaW, "dd-mm-yyyy hh:nn:ss")
Print "Fecha Madrid:", Format$(cambioTZ(fechaW), "dd-mm-yyyy hh:nn:ss")
End
Este programita genera en consola esto:
Fecha GreenWich: 24-08-2013 13:14:23
Fecha Madrid: 24-08-2013 15:14:23
Fecha GreenWich: 24-11-2013 13:14:23
Fecha Madrid: 24-11-2013 14:14:23
|
#4 Martes, 24 Diciembre 2013, 15:52 |
|
|
gatoviejo
Usuario
Registrado: Septiembre 2012
Mensajes: 20
Edad: 63 Ubicación: Barcelona
|
[SOLUCIONADO] Re: Convertir Una Fecha-hora De Hora UTC A Hora Local
Muchas gracias por poner hasta la rutina, la verdad es que no me esperaba tanto. Lo que pretendía era saber si había alguna función nativa que lo hiciera; no había encontrado ninguna y tampoco me sonaba nada por sistema operativo, aunque la información existe (/usr/share/zoneinfo) de la que se alimenta mysql.
Para completar la rutina de jsbsan, se tendría que añadir que el cambio se hiciera el último domingo del año. Para calcularlo se puede utilizar:
Con esto para mis necesidades es suficiente, pero si alguien quiere realizar una rutina más genérica tiene que tener en cuenta que el cambio de hora está regulado por ley y por lo tanto puede cambiar. En el presente está regulado por la directiva europea 2000/84 que es la que establece que el último domingo de marzo a las 02:00h se adelanta una hora y el último domingo de octubre a las 03:00h se retrasa una hora. Esto se revisa cada 5 años, por lo que en un futuro puede cambiar.
Además hay que tener en cuenta que no siempre ha sido así ni mucho menos:
Por geografía, España está en el huso horario de Greenwhich (de hecho, el meridiano pasa cerca de Castellón) y deberíamos tener la misma hora que Gran Bretaña y Portugal, pero por decisión política del año 1940, pasamos a tener la hora de Europa Central. Últimamente en el Congreso español se ha debatido si deberíamos volver al horario natural o no.
Por otro lado, el cambio de hora en verano se aplica en España desde 1974, pero el cambio se producía en marzo y septiembre y en el año 1996 se cambió al actual de marzo-octubre.
Como podéis ver, si alguien tiene un necesidad que abarque un periodo de tiempo más o menos grande del pasado, la rutina se puede complicar todo lo que se quiera.
Saludos
|
#5 Jueves, 26 Diciembre 2013, 11:15 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|