Hora local: cómo saber la hora actual en Perl

Perl tiene una práctica función incorporada para encontrar la fecha y hora actuales en sus scripts. Sin embargo, cuando hablamos de encontrar el tiempo, estamos hablando del tiempo que está configurado actualmente en la máquina que ejecuta el script. Por ejemplo, si está ejecutando su script Perl en su máquina local, localtime le devolverá la hora actual que configuró, y presumiblemente se establecerá en su zona horaria actual.

Cuando ejecuta la misma secuencia de comandos en un servidor web, puede encontrar que la hora local está apagada de la hora local en su sistema de escritorio. El servidor podría estar en una zona horaria diferente o estar configurado incorrectamente. Cada máquina puede tener una idea totalmente diferente de lo que es el tiempo local y puede tomar algún ajuste, ya sea dentro del script o en el servidor, para que coincida con lo que espera.

La función localtime devuelve una lista llena de datos sobre la hora actual, algunos de los cuales deberán ajustarse. Ejecute el programa a continuación y verá cada elemento en la lista impresa en la línea y separada por espacios.

instagram viewer

#! / usr / local / bin / perl
@timeData = localtime (hora);
print join ('', @timeData);

Debería ver algo similar a esto, aunque el número podría ser muy diferente.

20 36 8 27 11 105 2 360 0

Estos elementos de la hora actual son, en orden:

  • Segundos pasado el minuto
  • Minutos después de la hora
  • Horas pasadas la medianoche
  • Día del mes
  • Meses después del inicio del año.
  • Número de años desde 1900
  • Número de días desde el inicio de la semana (domingo)
  • Número de días desde el inicio del año.
  • Si o no horario de verano está activo

Entonces, si volvemos al ejemplo e intentamos leerlo, verá que son las 8:36:20 AM del 27 de diciembre de 2005, son 2 días después del domingo (martes), y son 360 días desde el comienzo del año. El horario de verano no está activo.

Hacer que Perl Localtime sea legible

Algunos de los elementos en la matriz que regresa localtime son un poco difíciles de leer. ¿Quién pensaría en el año actual en términos del número de años pasados ​​1900? Echemos un vistazo a un ejemplo que aclara nuestra fecha y hora.

 #! / usr / local / bin / perl

 @months = qw (ene feb mar abr may jun jul ago sep oct nov dic);

 @weekDays = qw (dom lun mar mié jue vie sáb dom);

 ($ segundo, $ minuto, $ hora, $ dayOfMonth, $ mes, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();

 $ año = 1900 + $ añoOffset;

 $ theTime = "$ hora: $ minuto: $ segundo, $ weekDays [$ dayOfWeek] $ meses [$ mes] $ dayOfMonth, $ año";

 print $ theTime; 

Cuando ejecuta el programa, debería ver una fecha y hora mucho más legibles como esta:

 9:14:42, miércoles 28 de diciembre de 2005 

Entonces, ¿qué hicimos para crear esta versión más legible? Primero, preparamos dos matrices con los nombres de los meses y días de la semana.

 @months = qw (ene feb mar abr may jun jul ago sep oct nov dic);

 @weekDays = qw (dom lun mar mié jue vie sáb dom); 

Dado que la función localtime devuelve estos elementos en valores que van desde 0-11 y 0-6 respectivamente, son candidatos perfectos para una matriz. El valor devuelto por localtime se puede usar como una dirección numérica para acceder al elemento correcto en la matriz.

 $ meses [$ mes] $ weekDays [$ dayOfWeek]


El siguiente paso es obtener todos los valores de la función localtime. En este ejemplo, estamos utilizando un acceso directo de Perl para colocar automáticamente cada elemento en la matriz localtime en su propia variable. Hemos elegido nombres para que sea fácil recordar qué elemento es cuál.

 ($ segundo, $ minuto, $ hora, $ dayOfMonth, $ mes, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();


También necesitamos ajustar el valor del año. Recuerde que localtime devuelve el número de años desde 1900, por lo que para encontrar el año actual, necesitaremos agregar 1900 al valor que se nos da.

 $ año = 1900 + $ añoOffset;

Cómo saber la hora GM actual en Perl

Supongamos que desea evitar todas las posibles confusiones de zona horaria y tomar el control del desplazamiento usted mismo. Obtener la hora actual en tiempo local siempre devolverá un valor que se basa en la configuración de la zona horaria de la máquina: un servidor en Estados Unidos volverá una vez, mientras que un servidor en Australia devolverá uno casi un día completo diferente debido a la zona horaria diferencias

Perl tiene una segunda función útil de indicación de la hora que funciona exactamente de la misma manera que la hora local, pero en lugar de devolver la hora fijada para la máquina zona horaria, vuelve Tiempo universal coordinado (abreviado como UTC, también llamado Greenwich Mean Time o GMT). Simplemente, la función se llama gmtime.

 #! / usr / local / bin / perl

 @timeData = gmtime (tiempo);

 print join ('', @timeData); 

Aparte del hecho de que el tiempo devuelto será el mismo en todas las máquinas y en GMT, no hay diferencia entre las funciones gmtime y localtime. Todos los datos y las conversiones se realizan de la misma manera.

 #! / usr / local / bin / perl

 @months = qw (ene feb mar abr may jun jul ago sep oct nov dic);

 @weekDays = qw (dom lun mar mié jue vie sáb dom);

 ($ segundo, $ minuto, $ hora, $ dayOfMonth, $ mes, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();

 $ año = 1900 + $ añoOffset;

 $ theGMTime = "$ hora: $ minuto: $ segundo, $ weekDays [$ dayOfWeek] $ meses [$ mes] $ dayOfMonth, $ año";

 print $ theGMTime; 

  1. localtime devolverá la hora local actual en la máquina que ejecuta el script.
  2. gmtime devolverá la hora media universal de Greenwich, o GMT (o UTC).
  3. Los valores de retorno pueden no ser exactamente lo que espera, así que asegúrese de convertirlos según sea necesario.