Project

General

Profile

Actions

Bug #15177

closed

起動した後にTZを変更するとTime#utcがずれることがある

Added by znz (Kazuhiro NISHIYAMA) over 5 years ago. Updated about 4 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
[ruby-dev:50642]
Tags:

Description

起動時に TZright/Asia/Tokyo にしていると Time#utc でローカルタイムと同じ時分秒になりますが、 TZ=Asia/Tokyo で起動してから ENV['TZ']='right/Asia/Tokyo' で変更すると Time#utc の結果がうるう秒のぶんだけずれます。

$ TZ=Asia/Tokyo ruby -ve "ENV['TZ']='right/Asia/Tokyo';t=Time.at(2<<30);p t;p t.utc"
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:14:08 UTC
$ TZ=right/Asia/Tokyo ruby -ve "t=Time.at(2<<30);p t;p t.utc"
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:13:41 UTC
% TZ=Asia/Tokyo ruby -ve "t=Time.at(2<<30);p t;p t.utc"
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
2038-01-19 12:14:08 +0900
2038-01-19 03:14:08 UTC

Updated by naruse (Yui NARUSE) over 5 years ago

その辺最近いじったのでtrunkの動作が期待通りか試して頂けますか

Updated by znz (Kazuhiro NISHIYAMA) over 5 years ago

trunk でも同じでした。
期待している値としては t と t.utc で同じ分秒になることですが、13:41と14:08のどちらが良いかは特に意見がありません。

% TZ=Asia/Tokyo ruby -ve "ENV['TZ']='right/Asia/Tokyo';t=Time.at(2<<30);p t;p t.utc"
ruby 2.6.0dev (2018-10-09 trunk 64976) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:14:08 UTC

Updated by naruse (Yui NARUSE) over 5 years ago

あれ、あぁ、そうか、r63848でいじったときにはまぁいいかと思ったんでした……。
期待は分かりますがright/*と非right/*を混ぜて使うのが実用的な用途とは思えないのであんまり…って感じですね…

Updated by nobu (Nobuyoshi Nakada) over 5 years ago

なぜかminirubyだと一致するようです。

$ TZ=Asia/Tokyo ./bin/ruby -ve "ENV['TZ']='right/Asia/Tokyo';t=Time.at(2<<30);p t;p t.utc"
ruby 2.5.2p91 (2018-10-01 revision 64893) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:14:08 UTC
$ TZ=Asia/Tokyo ./miniruby -ve "ENV['TZ']='right/Asia/Tokyo';t=Time.at(2<<30);p t;p t.utc"
ruby 2.5.2p91 (2018-10-01 revision 64893) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:13:41 UTC
Actions #5

Updated by naruse (Yui NARUSE) over 4 years ago

  • Status changed from Open to Feedback

Updated by shyouhei (Shyouhei Urabe) over 4 years ago

@naruse (Yui NARUSE) これ何がどうFeedbackなんですか?ここまでのやりとりだと @znz (Kazuhiro NISHIYAMA) は要求されている情報を既にもれなく答えているとしか読めませんが。

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

minirubyだと一致するのは、rubygemsをロードしていないからのようです。

$ TZ=Asia/Tokyo ./bin/ruby --disable=gems -ve "ENV['TZ']='right/Asia/Tokyo';t=Time.at(2<<30);p t;p t.utc"
ruby 2.7.0dev (2019-12-18T05:53:19Z master efbc0d499c) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:13:41 UTC
$ TZ=Asia/Tokyo ./bin/ruby --enable=gems -ve "ENV['TZ']='right/Asia/Tokyo';t=Time.at(2<<30);p t;p t.utc"
ruby 2.7.0dev (2019-12-18T05:53:19Z master efbc0d499c) [x86_64-linux]
2038-01-19 12:13:41 +0900
2038-01-19 03:14:08 UTC
Actions #8

Updated by akr (Akira Tanaka) about 4 years ago

  • Status changed from Feedback to Closed

Applied in changeset git|29e31e72fb5a14194a78ec974c4ba56c33ad8d45.


ruby_reset_timezone resets leap_second_info.

[Bug #15177]

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0