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?

Foi útil?

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";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top