日付関連のテストケースを書いていたら、ロサンゼルスの1970年4月1日0時はサマータイムではないけれど、2012年4月1日0時はサマータイムであることに気づきました。何かの間違いじゃないかと思って改めて調べてみたところ、ロサンゼルスで4月1日がサマータイムだった年は以下の5つの時期に含まれることがわかりました。
- 1918-1919年
- 1942-1945年(War Time)
- 1948年
- 1974-1975年
- 2007年以降、現在まで
このうち、1番目は第一次世界大戦中に制定された「標準時間法」 (Standard Time Act)によるものです。アメリカでは初のサマータイム導入でしたが、不評のため2年で廃止されたとか(おそらく終戦の影響もあったでしょう)。
2番目は第二次世界大戦時の省エネ対策として通年の「War Time」が実施されたもので、1942年2月9日から1945年9月30日まで継続的に運用されました。
3番目は1948年にカリフォルニアで電力危機があり、その対策でカリフォルニア州のみ3月14日から通年のサマータイムが実施されたようです。このころ各州バラバラでサマータイムを実施していたようですが、開始時期は大半が4月でした。
4番目は第一次オイルショック(1973年)によるもの。1967年から全米でサマータイムが実施されていますが、この開始時期は4月第1週からでした。しかし、オイルショックの影響により1974年は1月6日から、1975年は2月23日からサマータイム開始だったとのこと。
5番目は「包括エネルギー政策法」(Energy Policy Act of 2005)が2007年から施行され、サマータイム開始が4月第1週から3月第2週にズレたことによるもの。
サマータイムについて調べていたはずが、歴史の教科書に載っているような出来事が関係してくるのは面白いですね。
上のリストを作る方法
<?php for ($i = 1900; $i <= 2017; $i++) { $dt = new DateTime("$i-04-01 00:00:00", new DateTimezone("America/Los_Angeles")); var_dump($dt->format("c T")); }
このスクリプトの出力を下記のようにgrepすれば標準時でないもの(≒夏時間)が抜き出せます。
$ php dst-investigate.php | grep -v ST string(29) "1918-04-01T00:00:00-07:00 PDT" string(29) "1919-04-01T00:00:00-07:00 PDT" string(29) "1942-04-01T00:00:00-07:00 PWT" string(29) "1943-04-01T00:00:00-07:00 PWT" string(29) "1944-04-01T00:00:00-07:00 PWT" string(29) "1945-04-01T00:00:00-07:00 PWT" string(29) "1948-04-01T00:00:00-07:00 PDT" string(29) "1974-04-01T00:00:00-07:00 PDT" string(29) "1975-04-01T00:00:00-07:00 PDT" string(29) "2007-04-01T00:00:00-07:00 PDT" string(29) "2008-04-01T00:00:00-07:00 PDT" string(29) "2009-04-01T00:00:00-07:00 PDT" string(29) "2010-04-01T00:00:00-07:00 PDT" string(29) "2011-04-01T00:00:00-07:00 PDT" string(29) "2012-04-01T00:00:00-07:00 PDT" string(29) "2013-04-01T00:00:00-07:00 PDT" string(29) "2014-04-01T00:00:00-07:00 PDT" string(29) "2015-04-01T00:00:00-07:00 PDT" string(29) "2016-04-01T00:00:00-07:00 PDT" string(29) "2017-04-01T00:00:00-07:00 PDT"
上のように、タイムゾーン名がPDT(Pacific Daylight-saving Time、太平洋夏時間)やPWT(Pacific War Time、太平洋戦争時間)などと表示されているのがわかります。
PHPの日付関数はTime Zone Databaseを元にしているので、他の言語でも同じ結果を得る方法があると思います。