Perl strptime formato difere strftime
Pergunta
Eu estou tentando trabalhar com seqüências de data formatada como:
AAAA-MM-DDThh:mm:ss
strftime formato para gerar essa seqüência de caracteres é %FT%T
:
perl -MPOSIX=strftime -E 'say strftime q{%FT%T}, localtime;'
Mas quando eu tento analisar essa seqüência de data com Horário: Peça:
perl -MPOSIX=strftime -MTime::Piece -E '
say strftime q{%FT%T}, localtime;
Time::Piece->strptime( strftime(q{%FT%T}, localtime), q{%FT%T});
'
Eu tenho esse erro:
2013-11-15T17:32:58 Error parsing time at /usr/local/lib/perl/5.14.2/Time/Piece.pm line 469.
Ou se eu tentar isso:
perl -MPOSIX=strftime -MTime::Piece -E 'Time::Piece->strptime(strftime(q{%F}, localtime), q{%F});'
Eu tenho esse:
garbage at end of string in strptime: 2013-11-15 at /usr/local/lib/perl/5.14.2/Time/Piece.pm line 469.
No homem disse: %F
é ISO8601 formato de data em strptime e strftime ambos.É strptime compatível com strftime?
Solução
O módulo usa sua própria implementação de strptime
o que não entendo %F
.Ele não implementar a sua própria strftime
.É um desastre esperando para acontecer - você definitivamente deve usar um strftime
e strptime
que vêm da mesma fonte. Time::Piece::strptime
parece um desparation passar de uma era sem amplamente disponíveis, padronizado strptime
.
Agora que strptime
em POSIX, eu esperaria POSIX.pm
para exportá-la, então você pode usar o seu sistema de strptime
.Mas, aparentemente, esse módulo também é falha para manter-se.Há um separado POSIX::strptime
módulo o que lhe dá a sua biblioteca C do strptime
sem interferências.Eu sugiro usar o que.
Outras dicas
Não, Horário: Peça strftime/strptime formatos não são sempre compatíveis.Use a versão mais longa do que o formato de:
my $str = '2003-03-24T13:32:44';
my $f = '%Y-%m-%dT%H:%M:%S';
my $t = Time::Piece->strptime($str, $f);
print "$t\n";