redhat linux 上のperl5.8.0で下記のようなコードを動かすと
use utf8;
use Date::Simple;
print $Date::Simple::VERSION."\n";
$ENV{'TZ'}= "JST-9";
print "$ENV{'TZ'}\n";
print "1st time is ".localtime()."\n";
my $date = Date::Simple->new();
print "2nd time is ".localtime()."\n";
my $formated_date = $date->format('%Y年%m月%d日') ;
$ENV{'TZ'}= "JST-9";
print "3rd time is ".localtime()."\n";
結果が、
3.02
JST-9
1st time is Mon Apr 5 10:33:13 2010
2nd time is Mon Apr 5 10:33:13 2010
3rd time is Mon Apr 5 01:33:13 2010
な感じで、9時間戻ってしまうのですが、これを回避する方法ありますか?
Date::Simpleは、print $Date::Simple::VERSION."\n"; したところ、3.02 でした。
「 my $formated_date = $date->format('%Y年%m月%d日') ;」
処理以後のタイムゾーンが変更になってしまうので、期間チェックの処理がおかしくなります。
タイムゾーンを再び日本時間JSTに戻すのはどうしたらよいのでしょうか?
use strict; use warnings; use utf8; use Date::Simple; print $Date::Simple::VERSION."\n"; $ENV{'TZ'}= "GMT-9"; # JST print "$ENV{'TZ'}\n"; print "1st time is ".localtime()."\n"; my $date = Date::Simple->new(); print "2nd time is ".localtime()."\n"; $ENV{'TZ'}= "GMT+0"; my $formated_date1 = $date->format('%Y年%m月%d日') ; print "2nd time is ".localtime()."\n"; $ENV{'TZ'}= "GMT-9"; # JST my $formated_date2 = $date->format('%Y年%m月%d日') ; print "3rd time is ".localtime()."\n";
良くわからんが環境変数の設定を勘違いしてるだけでは?
残念ながら、下記のような結果でした。
3.02
GMT-9
1st time is Mon Apr 5 13:07:02 2010
2nd time is Mon Apr 5 13:07:02 2010
2nd time is Mon Apr 5 04:07:02 2010
3rd time is Mon Apr 5 04:07:02 2010
Date::Simpleのformat関数の部分の一部が
local $ENV{TZ} = 'UTC+0';
return POSIX::strftime ($format, _gmtime ($self));
という感じらしいので、その処理の後で、
POSIX::tzset();
を入れないといけないんでしょうか?
私もよくわかってないのですが・・・。