Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Convertir Una Fecha-hora De Hora UTC A Hora Local
Autor Mensaje
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes CHAT: Quedada Sabado 15/01/2011 20.00 Hora... jsbsan Sobre Gambas-es 29 Domingo, 09 Enero 2011, 19:21 Ver último mensaje
jsbsan
No hay nuevos mensajes Mostrar Fecha Y Hora Actual En Tiempo De E... kotonfree General 3 Domingo, 17 Abril 2011, 11:44 Ver último mensaje
jguardon
No hay nuevos mensajes Controles Para Fecha Y Hora sc0w Controles/Librerías/Componentes 6 Viernes, 26 Agosto 2011, 05:28 Ver último mensaje
Fenriz07
No hay nuevos mensajes Formato De Hora. Fenriz07 General 5 Jueves, 01 Septiembre 2011, 02:52 Ver último mensaje
razaAztk
 

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


 
Lista de permisos
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



  

 

cron