• ベストアンサー

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

基礎的な質問ですみません。 ------------------------------------------------- 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秒 です。 ------------------------------------------------ となります。なぜこのように矛盾するのでしょうか。 私が正しく理解できていないだけでしょうか。 教えてください。お願いします。

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

  • ベストアンサー
  • hikomin
  • ベストアンサー率63% (40/63)
回答No.1

不思議ですね。ウチの環境では、 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 となりましたけれど。 もうちょっと調べてみますが…。

vvat2
質問者

補足

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

その他の回答 (2)

  • t140
  • ベストアンサー率39% (59/150)
回答No.3

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

vvat2
質問者

補足

お答えいただいてありがとうございます。しかし、私の質問の意図とは違う答えのようです。 サーバーと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を再インストールしてみようと思っています。 せっかくお答えいただいたのにすみません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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; で上記のような結果になりました。

vvat2
質問者

補足

テストしていただいてありがとうございます。 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再インストールしてみましょう。

関連するQ&A

専門家に質問してみよう