Skip to content

Instantly share code, notes, and snippets.

@koseki
Last active April 23, 2021 01:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koseki/90488b8eea9bc991715b7b2b69da2cd6 to your computer and use it in GitHub Desktop.
Save koseki/90488b8eea9bc991715b7b2b69da2cd6 to your computer and use it in GitHub Desktop.
サマータイム終了時の挙動

タイムゾーン America/Los_Angeles では、サマータイム終了日 2018/11/04 の 01:00:00 〜 01:59:59 が2度繰り返される。

Ruby の Time は、午前1時台をサマータイム終了後として扱っている。

irb(main):001:0> ENV['TZ'] = 'America/Los_Angeles'
=> "America/Los_Angeles"
irb(main):002:0> Time.local(2018, 11, 4, 0, 59, 0)
=> 2018-11-04 00:59:00 -0700
irb(main):003:0> Time.local(2018, 11, 4, 0, 59, 0).dst?
=> true
irb(main):004:0> Time.local(2018, 11, 4, 1, 0, 0)
=> 2018-11-04 01:00:00 -0800
irb(main):005:0> Time.local(2018, 11, 4, 1, 0, 0).dst?
=> false

1 時になったタイミングで1時間飛ぶ。

irb(main):001:0> ENV['TZ'] = 'America/Los_Angeles'
=> "America/Los_Angeles"
irb(main):003:0> Time.local(2018, 11, 4, 0, 59, 59).to_i
=> 1541318399
irb(main):004:0> Time.local(2018, 11, 4, 1, 0, 0).to_i
=> 1541322000
irb(main):005:0> 1541322000 - 1541318399
=> 3601

PHP の strtotime は、午前1時台をサマータイム中として扱っている。2時になったタイミングで1時間飛ぶ。

php > echo strtotime("2018-11-04 01:59:59 America/Los_Angeles");
1541321999
php > echo strtotime("2018-11-04 02:00:00 America/Los_Angeles");
1541325600
php > echo 1541325600 - 1541321999;
3601
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment