perl(CPAN)のTime::PieceのstrptimeがError parsing time
CPANにあるTime::Pieceを使って、日付・時刻を解析しようとすると、エラーになる。
$ ./boardz2ki2.cgi DEBUG:Fri Dec 17 04:41:20 UTC 2010 Error parsing time at /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Time/Piece.pm line 469.
こんなソース
my $tzoffset = Time::Seconds->new(8*60*60); print "DEBUG:$game_time\n"; my $tp = Time::Piece->strptime($game_time, "%a %b %d %T %Z %Y") + $tzoffset; my $date = $tp->ymd("/")." ".$tp->hms(":");
原因
解析される文字列に問題がある。
- UTC は %Z では扱えない (JSTも)。
- RFC822 or ISO8601形式でないといけない
- 月名が誤ってる
対処
文字列、または解析用文字列を適切に修正。上の例では、UTCしか渡ってこないはずなので、決め打ちで埋め込んで対応。
my $tzoffset = Time::Seconds->new(8*60*60); print "DEBUG:$game_time\n"; my $tp = Time::Piece->strptime($game_time, "%a %b %d %T UTC %Y") + $tzoffset; my $date = $tp->ymd("/")." ".$tp->hms(":");
また、エラーメッセージを表示させたくない場合は、evalで括ると良い。
[[$$amazon-search-result-large books-jp perl]]