2007年04月03日(火) [過去の今日]
#6 PerlのDateTimeモジュールでset_time_zoneすると9時間ずれる件
元データの日付がUTCで記録されてるのだが、出力はJSTにしたい、と思って
my $dt = DateTime::Format::MySQL->parse_datetime($datetime); $dt->set_formatter(DateTime::Format::W3DTF); $dt->set_time_zone('Asia/Tokyo);
とかやると9時間ずれやがる。どうもset_time_zoneは現状の日付がどこのタイムゾーンのものかを指定するもの、ということか?
と思ったら、DateTime(3pm)にこんな記述ハッケソ。
For example: my $dt = DateTime->new( year => 2000, month => 5, day => 10, hour => 15, minute => 15, time_zone => 'America/Los_Angeles', ); print $dt->hour; # prints 15 $dt->set_time_zone( 'America/Chicago' ); print $dt->hour; # prints 17
……ちゃんとタイムゾーンに合わせてくれるんじゃん。
つまりあれか。time_zoneが空っぽのときは既存日付のタイムゾーンを指定、そうでなければあたらしく与えられたタイムゾーンの日付に変換、か。
ということでこうだな。
my $dt = DateTime::Format::MySQL->parse_datetime($datetime); $dt->set_formatter(DateTime::Format::W3DTF); $dt->set_time_zone('UTC'); $dt->set_time_zone('Asia/Tokyo);
……何か激しく美しくない気がするのは気のせいか?
(@920)