人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlのDate::Simpleのformatを使うと時間がUTC(GMT?)になってしまうのですが、これを回避する方法はありますか?

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に戻すのはどうしたらよいのでしょうか?


●質問者: samasuya
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:3rd GMT JST Linux Perl
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント
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();

を入れないといけないんでしょうか?

私もよくわかってないのですが・・・。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ