1999-4-06 11:18:26 たかの
Re: 時差修正が狂ってしまいました [中川 靖彦] へのコメント 1999-4-06 02:53:57
] 突然localtimeが変わってしまうなんてことはあるんでしょうか?
「突然」ということはありません。サーバ管理者がタイムゾーン設定をいじったんでしょう。
サーバのdefault locale自体が変更されているかもしれませんね。
] やってみましたが、やはりあいませんでした。
gmtime(time);
と
$ENV{'TZ'} = 'JST-9';
のどちらを試したのでしょうか?
gmtime()は、GMT(国際標準時)での時刻を取得する関数で、
(サーバの設定さえ間違っていなければ)どんなタイムゾーン設定がされていても
同じ値がかえってくるようになっています。
localtimeは、タイムゾーン設定に従って(そのサーバの所在地の)時刻を取得します。
このタイムゾーン設定を、(自分のPerlスクリプトだけ)日本時間として扱って
しまおうというのが$ENV{'TZ'} = 'JST-9'です。
中川さんの場合、
localtime(time + XXX);
として、XXXの値で強引に時差を調整しているようですが、これはあまりよろしくありません。
このワザを使う必要があるのは、サーバ時刻が明らかに間違っている場合のみです。
柿花さんのように
> $ENV{'TZ'} = "JST-9";
> ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
として、それでも誤差が出る場合は
localtime(time);
を
localtime(time + XXX);
として誤差を調整するのが「お作法」です。
が、「お作法」を使わなくてはならないようなサーバでは、とても管理に信頼を
おけませんので、とっととサーバを移ったほうがよいと思います。