こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エポック秒の基点について

基礎的な質問ですみません。
-------------------------------------------------
my $time1 = timelocal(0,0,9,1,1-1,1970-1900);

my $time2 = timelocal(0,0,10,1,1-1,1970-1900);

my @ltime = localtime(0);
my $time3 = sprintf("%d年%d月%d日%02d時%02d分%02d秒",
$ltime[5]+1900,$ltime[4]+1,$ltime[3],$ltime[2],$ltime[1],$ltime[0]);

print<<"EOM";
1970年1月1日9時00分00秒のエポック秒は $time1 です。

1970年1月1日10時00分00秒のエポック秒は $time2 です。

エポック秒 0 は $time3 です。
EOM
------------------------------------------------
と書きます。結果は、
------------------------------------------------
1970年1月1日9時00分00秒のエポック秒は -3600 です。

1970年1月1日10時00分00秒のエポック秒は 3600 です。

エポック秒 0 は 1970年1月1日09時00分00秒 です。
------------------------------------------------
となります。なぜこのように矛盾するのでしょうか。
私が正しく理解できていないだけでしょうか。
教えてください。お願いします。

投稿日時 - 2005-02-20 23:05:45

QNo.1229139

暇なときに回答ください

質問者が選んだベストアンサー

不思議ですね。ウチの環境では、

use Time::Local;
print timelocal( 0, 0, 8, 1, 0, 70); # => -3600
print timelocal( 0, 0, 9, 1, 0, 70); # => 0
print timelocal( 0, 0, 10, 1, 0, 70); # => 3600

となりましたけれど。
もうちょっと調べてみますが…。

投稿日時 - 2005-02-20 23:32:51

補足

あらら?
ご回答ありがとうございます。
不思議?今PCでやっていますので、サーバーにおいてテストしてみます。

投稿日時 - 2005-02-20 23:34:07

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

サーバのタイムゾーン設定でlocaltimeは違うと思います。
gmtimeは世界共通のグリニッジ世界標準時GMTです。

サーバの設定でGMTやJSTなどさまざまでしょう。

投稿日時 - 2005-02-21 10:50:46

補足

お答えいただいてありがとうございます。しかし、私の質問の意図とは違う答えのようです。

サーバーとPCの間で時間が食い違ってるという意味ではなく、私のPCで実行したときの結果がおかしいのです。

私のPCで
my $time = timelocal(0,0,9,1,1-1,1970-1900);
と書けば、$time に -3600 が返されます。

my $time = timelocal(59,59,9,1,1-1,1970-1900);
と書けば、$time に -1 が返されます。

my $time = timelocal(0,0,10,1,1-1,1970-1900);
と書けば、$time に 3600 が返されます。

最初は私の理解不足かと思ったのですが、そうではないようなので、ApachかPerlがおかしくなっているのか、それともわたしのPCの環境ににPerlと相性が合わない何かがあるのかだと思っています。
なので、PCにApacheとPerlを再インストールしてみようと思っています。

せっかくお答えいただいたのにすみません。

投稿日時 - 2005-02-21 22:15:10

ANo.2

1970年1月1日9時00分00秒のエポック秒は 0 です。
1970年1月1日10時00分00秒のエポック秒は 3600 です。
エポック秒 0 は 1970年1月1日09時00分00秒 です。
ウチもuse Time::Local;
で上記のような結果になりました。

投稿日時 - 2005-02-21 00:02:38

補足

テストしていただいてありがとうございます。
iswebのレンタルサーバに置いて実行したら、ちゃんと

1970年1月1日9時00分00秒のエポック秒は 0 です。
1970年1月1日10時00分00秒のエポック秒は 3600 です。
エポック秒 0 は 1970年1月1日09時00分00秒 です。
となりました。

PCにインストールしたperlがおかしくなってるのか?
あしたperl再インストールしてみましょう。

投稿日時 - 2005-02-21 01:29:04

あなたにオススメの質問