PerlのDateTimeとTime::Pieceでのタイムゾーン指定の仕方の比較
スポンサードリンク
MySQLのtimestamp形式の日付文字列をPerlで日付として取り扱いたい。いままではDateTimeを使っていたけれども、今後の事を考えるとPerl 5.10で標準となっているTime::Pieceを使うのがよいだろう。ということでテストしてみたが。
テストしたのは、MySQLのtimestamp形式 "2012-03-01 00:00:00"(GMT) を、日本の時刻として読めるISO 8601形式の日付文字列(JST+09:00)として表示させるというもの。
FileName: datetime-timepiece.pl
use strict;
use warnings;
use Time::Piece::MySQL;
use DateTime::Format::MySQL;
my $datestrings = '2012-03-01 00:00:00';
my $dt = DateTime::Format::MySQL
->parse_datetime( $datestrings )
->set_time_zone('GMT')
->set_time_zone('Asia/Tokyo');
# DateTime::Format::MySQLを使わない場合は、
#use DateTime::Format::Strptime;
#my $strp = DateTime::Format::Strptime->new(pattern => '%F %T',time_zone => 'GMT');
#my $dt = $strp->parse_datetime( $datestrings )->set_time_zone('Asia/Tokyo');
my $tp = localtime Time::Piece->from_mysql_timestamp( $datestrings )->epoch ;
# Time::Piece::MySQLを使わない場合は、
#my $tp = localtime Time::Piece->strptime( $datestrings, '%Y-%m-%d %H:%M:%S')->epoch ;
print "DateTime > $dt\n";
print "Time::Piece> ".$tp->datetime."\n";
__END___
実行結果:
$ perl datetime-timepiece.pl DateTime > 2012-03-01T09:00:00 Time::Piece> 2012-03-01T09:00:00 $
勝手知ったるDateTimeは、日付文字列をparseした瞬間は、タイムゾーンなどないまっさら状態なので、1回目のset_time_zone('GMT')で、"2012-03-01 00:00:00" はGMTにおける時刻であると設定したうえで、2回目のset_time_zone('Asia/Tokyo')で、日本のタイムゾーンを設定しました。set_time_zoneが2つあるというのが違和感ありますが、だいたいこんなもんです。
一方、Time::Pieceでは、parseして得られた時刻はGMTになっているから、一回epochに戻してからlocaltimeの引数として指定することで、タイムゾーンを設定しています。epochにまで戻す必要があるというのが違和感ありますが、そんなもののようです。
こんな感じで、タイムゾーンの指定は難しいよ、というお話でした。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3877





![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)

コメントする