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/YY Data abreviada , equivalente a%m/%d/%y |
08/23/01 |
%e |
Dia do mês, preenchido com espaços ( 1-31 ) |
23 |
%F |
YYYY-MM-DD Data 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