Localtime: Como saber a hora atual em Perl

Perl possui uma útil função interna para encontrar a data e hora atuais em seus scripts. No entanto, quando falamos em encontrar um horário, estamos falando do horário atualmente definido na máquina que está executando o script. Por exemplo, se você estiver executando seu script Perl em sua máquina local, o horário local retornará o horário atual que você definiu e, presumivelmente, o seu fuso horário atual.

Quando você executa o mesmo script em um servidor Web, pode descobrir que a hora local está diferente da hora local no seu sistema de desktop. O servidor pode estar em um fuso horário diferente ou estar configurado incorretamente. Cada máquina pode ter uma idéia totalmente diferente do que é a hora local e pode levar alguns ajustes, seja no script ou no próprio servidor, para que ela corresponda ao que você espera.

A função localtime retorna uma lista cheia de dados sobre o horário atual, alguns dos quais precisam ser ajustados. Execute o programa abaixo e você verá cada elemento da lista impresso na linha e separado por espaços.

instagram viewer
#! / usr / local / bin / perl
@timeData = hora local (hora);
junção de impressão ('', @timeData);

Você deve ver algo semelhante a isso, embora o número possa ser muito diferente.

20 36 8 27 11 105 2 360 0

Esses elementos da hora atual estão, em ordem:

  • Segundos depois do minuto
  • Minutos depois da hora
  • Horas depois da meia-noite
  • Dia do mês
  • Meses após o início do ano
  • Número de anos desde 1900
  • Número de dias desde o início da semana (domingo)
  • Número de dias desde o início do ano
  • Independente da resposta horário de verão está ativo

Portanto, se voltarmos ao exemplo e tentarmos lê-lo, você verá que são 8:36:20 do dia 27 de dezembro de 2005, faltam dois dias para o domingo (terça-feira) e 360 ​​dias desde o início do ano. O horário de verão não está ativo.

Tornando o Perl Localtime legível

Alguns dos elementos da matriz retornados pela hora local são um pouco difíceis de ler. Quem pensaria no ano atual em termos do número de anos após 1900? Vamos dar uma olhada em um exemplo que torna nossa data e hora mais claras.

 #! / usr / local / bin / perl

 @months = qw (jan fev mar abr mai jun jul ago set out nov dez);

 @weekDays = qw (Dom Seg Ter Qua Qui Sex Sab Dom);

 ($ segundo, $ minuto, $ hora, $ diaDeMês, $ mês, $ anoOffset, $ diaDe semana, $ dia de Ano, $ luz de dia) = localtime ();

 $ ano = 1900 + $ anoOffset;

 $ theTime = "$ hora: $ minuto: $ segundo, $ weekDays [$ dayOfWeek] $ meses [$ mês] $ dayOfMonth, $ year";

 imprima $ theTime; 

Ao executar o programa, você verá uma data e hora muito mais legíveis como esta:

 9:14:42, quarta-feira 28 de dezembro de 2005 

Então, o que fizemos para criar esta versão mais legível? Primeiro, preparamos duas matrizes com os nomes dos meses e dias da semana.

 @months = qw (jan fev mar abr mai jun jul ago set out nov dez);

 @weekDays = qw (Dom Seg Ter Qua Qui Sex Sab Dom); 

Como a função localtime retorna esses elementos em valores que variam de 0 a 11 e 0 a 6, respectivamente, eles são candidatos perfeitos para uma matriz. O valor retornado pela hora local pode ser usado como um endereço numérico para acessar o elemento correto na matriz.

 $ meses [$ mês] $ weekDays [$ dayOfWeek]


O próximo passo é obter todos os valores da função de hora local. Neste exemplo, estamos usando um atalho Perl para colocar automaticamente cada elemento na matriz localtime em sua própria variável. Escolhemos nomes para que seja fácil lembrar qual elemento é qual.

 ($ segundo, $ minuto, $ hora, $ diaDeMês, $ mês, $ anoOffset, $ diaDe semana, $ dia de Ano, $ luz de dia) = localtime ();


Também precisamos ajustar o valor do ano. Lembre-se de que a hora local retorna o número de anos desde 1900; portanto, para encontrar o ano atual, precisamos adicionar 1900 ao valor fornecido.

 $ ano = 1900 + $ anoOffset;

Como saber a hora atual do GM no Perl

Digamos que você queira evitar todas as possíveis confusões de fuso horário e assumir o controle da compensação. Obter a hora atual no horário local sempre retornará um valor baseado nas configurações de fuso horário da máquina - um servidor em os EUA retornarão uma vez, enquanto um servidor na Austrália retornará um quase um dia inteiro diferente devido ao fuso horário diferenças.

O Perl possui uma segunda função útil de contar o tempo, que funciona exatamente da mesma maneira que a hora local, mas em vez de retornar o tempo fixado para a máquina. fuso horário, retorna Tempo Universal Coordenado (abreviado como UTC, também chamado horário de Greenwich ou GMT). Simplesmente a função é chamada gmtime.

 #! / usr / local / bin / perl

 @timeData = gmtime (hora);

 junção de impressão ('', @timeData); 

Além do fato de que o horário retornado será o mesmo em todas as máquinas e no GMT, não há diferença entre as funções gmtime e localtime. Todos os dados e conversões são feitos da mesma maneira.

 #! / usr / local / bin / perl

 @months = qw (jan fev mar abr mai jun jul ago set out nov dez);

 @weekDays = qw (Dom Seg Ter Qua Qui Sex Sab Dom);

 ($ segundo, $ minuto, $ hora, $ diaDeMês, $ mês, $ anoOffset, $ diaDe semana, $ dia de Ano, $ luz de dia) = gmtime ();

 $ ano = 1900 + $ anoOffset;

 $ theGMTime = "$ hora: $ minuto: $ segundo, $ weekDays [$ dayOfWeek] $ meses [$ mês] $ dayOfMonth, $ year";

 imprima $ theGMTime; 

  1. localtime retornará a hora local atual na máquina que executa o script.
  2. O gmtime retornará o horário médio universal de Greenwich, ou GMT (ou UTC).
  3. Os valores de retorno podem não ser exatamente o que você espera, portanto, converta-os conforme necessário.