• Publicidad

Convertir DateTime a UTC y viceversa

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Convertir DateTime a UTC y viceversa

Notapor Sombrerero_Loco » 2008-12-01 09:17 @428

¡Buenas de nuevo!

Tengo entre manos un código que necesita leer de una DB de Oracle las fechas en UTC (1227696222) y tengo que convertirlas a formato normal (26/11/2008 10:00).
He estado buscando por CPAN, investigando el uso del modulo DateTime y nada, ¿alguien sabe cómo hacerlo?
Debería de poderse hacer para usarlo como subrutina de conversión (una para cada sentido de la conversión).

¡Gracias por adelantado!
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514

Publicidad

Notapor explorer » 2008-12-01 12:20 @555

Eso no es UTC, es tiempo universal en Unix, número de segundos desde el Epoch.

Con DateTime todo (o casi todo) lo relacionado con fechas se puede hacer:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use DateTime;

$t = DateTime->from_epoch(
    epoch => 1227696222,
);

print $t->strftime("%F %T");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Sale:
Código: Seleccionar todo
2008-11-26 10:43:42
Ahora bien, no coincide con el formato que quieres, entonces debes cambiarlo a
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $t->strftime("%d/%m/%Y %H:%M");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
26/11/2008 10:43

Eso sí, tienes que recordar que la fecha y hora que sale sigue siendo en la zona horaria UTC. Si la quieres en tu propia zona horaria, debes hacer un cambio de zona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$t->set_time_zone("America/Chicago");
print $t->strftime("%d/%m/%Y %H:%M");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
26/11/2008 04:43
(Seis horas menos de diferencia entre Chicago y UTC)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Sombrerero_Loco » 2008-12-02 06:17 @303

¡Muchísimas gracias, tío!
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514

Notapor Sombrerero_Loco » 2008-12-03 06:02 @293

Creo que no funciona del todo correcto, porque no sé que zona sería para la nuestra, ya que en UTC serían ahora mismo las 11:00 y según mi PC (que estoy en Madrid) las 12:00.

Siento ser pazguato, pero no me entero.

¡Gracias!
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514

Notapor explorer » 2008-12-03 06:21 @306

Ahora mismo, en España, tenemos el horario de invierno, que es una hora por encima del UTC.

La zona horaria local es "Europe/Madrid".

Código: Seleccionar todo
explorer@joaquin:~> perl -MDateTime -le '$t = DateTime->now(); $t->set_time_zone("UTC"); print $t->strftime("%F %T"); $t->set_time_zone("Europe/Madrid"); print $t->strftime("%F %T")'
2008-12-03 11:46:12
2008-12-03 12:46:12
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Sombrerero_Loco » 2008-12-03 09:36 @441

Joer, mira que probé con "Europe/London" y "Europe/Berl", y no me devolvían valores, menos pensé que "Europe/Madrid" me funcionaría...

¡¡Comprobado, ahora ya sí que va!!

¡Gracias de nuevo!


PD: a ver si me pongo a tono y empiezo a generar respuesta y no solo preguntas :)
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514

Notapor explorer » 2008-12-03 10:56 @497

El módulo DateTime::TimeZone, con el método all_names(), devuelve una lista de todas las zonas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados