Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Convertir Una Fecha-hora De Hora UTC A Hora Local

Convertir Una Fecha-hora De Hora UTC A Hora Local
Artículo
Responder citando    Descargar mensaje  
Mensaje 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.



 
gatoviejo - Ver perfil del usuario Enviar mensaje privado  
gatoviejo [ Lunes, 23 Diciembre 2013, 18:21 ]
 


Convertir Una Fecha-hora De Hora UTC A Hora Local
Comentarios
Responder citando    Descargar mensaje  
Mensaje 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



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Lunes, 23 Diciembre 2013, 20:10 ]
Responder citando    Descargar mensaje  
Mensaje 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.



 
gatoviejo - Ver perfil del usuario Enviar mensaje privado  
gatoviejo [ Martes, 24 Diciembre 2013, 13:27 ]
Responder citando    Descargar mensaje  
Mensaje 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:

Public Function cambioTZ(fechaGreenWhich As Date) As Date
  
  Dim fecha As Date
  
  If Format$(fechaGreenWhich, "mmddnn") > "033002" And Format$(fechaGreenWhich, "mmddnn") < "102703" Then
    'horario verano: suma +2 hora
    fecha = DateAdd(fechaGreenWhich, gb.Hour, 2)
  Else
    'horario invierno: suma +1 hora
    fecha = DateAdd(fechaGreenWhich, gb.Hour, 1)
    
  Endif
  Return fecha  
  
End
 


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



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 24 Diciembre 2013, 15:52 ]
Responder citando    Descargar mensaje  
Mensaje [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:
Public Function UltimoDomingoMes(Anyo As Integer, Mes As Integer) As Date
  Dim Fecha As Date

  Fecha = Val("01/" & Mes & "/" & anyo)

  Return DateAdd(Fecha, gb.Day, - WeekDay(Fecha)
End
 


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



 
gatoviejo - Ver perfil del usuario Enviar mensaje privado  
gatoviejo [ Jueves, 26 Diciembre 2013, 11:15 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron