Perl - Data e Hora

Este capítulo lhe dará o conhecimento básico sobre como processar e manipular datas e horas em Perl.

Data e hora atuais

Vamos começar com localtime()função, que retorna valores para a data e hora atuais se não forem fornecidos argumentos. A seguir está a lista de 9 elementos retornada pelolocaltime função ao usar no contexto de lista -

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Tente o exemplo a seguir para imprimir diferentes elementos retornados pela função localtime () -

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

Quando o código acima é executado, ele produz o seguinte resultado -

16 Feb Sat

Se você usar a função localtime () no contexto escalar, ela retornará a data e a hora do fuso horário atual definido no sistema. Experimente o seguinte exemplo para imprimir a data e hora atuais em formato completo -

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

Quando o código acima é executado, ele produz o seguinte resultado -

Local date and time Sat Feb 16 06:50:45 2013

Hora GMT

A função gmtime()funciona exatamente como a função localtime (), mas os valores retornados são localizados para o fuso horário de Greenwich padrão. Quando chamado no contexto de lista, $ isdst, o último valor retornado por gmtime, é sempre 0. Não há horário de verão em GMT.

Você deve tomar nota do fato de que localtime () retornará a hora local atual na máquina que executa o script e gmtime () retornará a hora universal de Greenwich, ou GMT (ou UTC).

Experimente o seguinte exemplo para imprimir a data e hora atuais, mas na escala GMT -

#!/usr/local/bin/perl

$datestring = gmtime();
print "GMT date and time $datestring\n";

Quando o código acima é executado, ele produz o seguinte resultado -

GMT date and time Sat Feb 16 13:50:45 2013

Formato de data e hora

Você pode usar a função localtime () para obter uma lista de 9 elementos e mais tarde você pode usar o printf() função para formatar data e hora com base em seus requisitos, como segue -

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();

printf("Time Format - HH:MM:SS\n");
printf("%02d:%02d:%02d", $hour, $min, $sec);

Quando o código acima é executado, ele produz o seguinte resultado -

Time Format - HH:MM:SS
06:58:52

Tempo de época

Você pode usar a função time () para obter o tempo da época, ou seja, o número de segundos decorridos desde uma determinada data, no Unix é 1º de janeiro de 1970.

#!/usr/local/bin/perl
 
$epoc = time();

print "Number of seconds since Jan 1, 1970 - $epoc\n";

Quando o código acima é executado, ele produz o seguinte resultado -

Number of seconds since Jan 1, 1970 - 1361022130

Você pode converter um determinado número de segundos em string de data e hora da seguinte maneira -

#!/usr/local/bin/perl

$datestring = localtime();
print "Current date and time $datestring\n";

$epoc = time();
$epoc = $epoc - 24 * 60 * 60;   # one day before of current date.

$datestring = localtime($epoc);
print "Yesterday's date and time $datestring\n";

Quando o código acima é executado, ele produz o seguinte resultado -

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

Função POSIX strftime ()

Você pode usar a função POSIX strftime()para formatar a data e a hora com a ajuda da tabela a seguir. Observe que os especificadores marcados com um asterisco (*) dependem da localidade.

Especificador Substituído por Exemplo
%a Nome abreviado do dia da semana * Thu
%A Nome completo do dia da semana * Thursday
%b Nome abreviado do mês * Aug
%B Nome completo do mês * August
%c Representação de data e hora * Thu Aug 23 14:55:02 2001
%C Ano dividido por 100 e truncado em um número inteiro ( 00-99) 20
%d Dia do mês, preenchido com zeros ( 01-31) 23
%D MM/DD/YYData abreviada , equivalente a%m/%d/%y 08/23/01
%e Dia do mês, preenchido com espaços ( 1-31) 23
%F YYYY-MM-DDData abreviada , equivalente a%Y-%m-%d 2001-08-23
%g Ano baseado na semana, últimos dois dígitos ( 00-99) 01
%G Ano baseado na semana 2001
%h Nome abreviado do mês * (igual a %b) Aug
%H Hora no formato 24h ( 00-23) 14
%I Hora no formato 12h ( 01-12) 02
%j Dia do ano ( 001-366) 235
%m Mês como um número decimal ( 01-12) 08
%M Minuto ( 00-59) 55
%n Caractere de nova linha ( '\n')
%p Designação AM ou PM PM
%r Relógio de 12 horas * 02:55:02 pm
%R Tempo de 24 horas HH:MM, equivalente a%H:%M 14:55
%S Segundo ( 00-61) 02
%t Caractere de tabulação horizontal ( '\t')
%T Formato de hora ISO 8601 ( HH:MM:SS), equivalente a%H:%M:%S 14:55
%u Dia da semana ISO 8601 como número com segunda-feira como 1( 1-7) 4
%U Número da semana com o primeiro domingo como o primeiro dia da semana um ( 00-53) 33
%V Número da semana ISO 8601 ( 00-53) 34
%w Dia da semana como um número decimal com domingo como 0( 0-6) 4
%W Número da semana com a primeira segunda-feira como o primeiro dia da semana um ( 00-53) 34
%x Representação de data * 08/23/01
%X Representação de tempo * 14:55:02
%y Ano, últimos dois dígitos ( 00-99) 01
%Y Ano 2001
%z

Deslocamento ISO 8601 de UTC no fuso horário (1 minuto = 1, 1 hora = 100)

Se o fuso horário não puder ser encerrado, nenhum caractere

+100
%Z

Nome ou abreviatura do fuso horário *

Se o fuso horário não puder ser encerrado, nenhum caractere

CDT
%% Um %sinal %

Vamos verificar o exemplo a seguir para entender o uso -

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
printf("date and time - $datestring\n");

Quando o código acima é executado, ele produz o seguinte resultado -

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013