概要
- GMT を CPAN:HTTP-Date および Perl 標準機能のみを使ってローカルタイムに変換する。
- GMTtoLocal2 は時差の指定は無視する。
ソース
-
GMTtoLocal.zip
#!/usr/bin/perl # GMT からローカルタイム(JST)に変換 use strict; use warnings; use utf8; use Encode; use HTTP::Date qw( time2str str2time time2iso ); use POSIX qw(strftime); use Time::Local; my $charsetConsole = 'CP932'; my $charsetFile = 'UTF-8'; binmode( STDIN, ":encoding($charsetConsole)" ); binmode( STDOUT, ":encoding($charsetConsole)" ); binmode( STDERR, ":encoding($charsetConsole)" ); my @sample = ( '2011-11-23T00:00:00Z', '2011-12-31T20:00:00Z', '2012-02-28T21:00:00+00:00', '2012-02-28T21:00:00+09:00', ); foreach my $src ( @sample ){ printf( "Source\t\t%s\nHTTP::Date\t%s\nStandard\t%s\n\n", $src, GMTtoLocal1( $src ), GMTtoLocal2( $src ) ); } exit(); # HTTP::Date を使用 # http://search.cpan.org/dist/HTTP-Date/ sub GMTtoLocal1 { my( $gmt ) = @_; return time2iso( str2time( $gmt, 'Asia/Tokyo' ) ); } # Perl標準機能のみ # http://chalow.net/2010-03-01-5.html # 時差の指定は無視して常にGMTと見なす。 sub GMTtoLocal2 { my( $gmt ) = @_; my $ret = $gmt; if ( $gmt =~ /^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)/ ){ my $utm = timegm( $6, $5, $4, $3, $2-1, $1 ); $ret = strftime( "%Y-%m-%d %H:%M:%S", localtime( $utm ) ); } return $ret; } # EOF
出力
Source 2011-11-23T00:00:00Z
HTTP::Date 2011-11-23 09:00:00
Standard 2011-11-23 09:00:00
Source 2011-12-31T20:00:00Z
HTTP::Date 2012-01-01 05:00:00
Standard 2012-01-01 05:00:00
Source 2012-02-28T21:00:00+00:00
HTTP::Date 2012-02-29 06:00:00
Standard 2012-02-29 06:00:00
Source 2012-02-28T21:00:00+09:00
HTTP::Date 2012-02-28 21:00:00
Standard 2012-02-29 06:00:00