目次
概要
作っているシステムで米国東部との時差の計算が必要になったので、調べてまとめました。
また、サマータイムの理解が曖昧だったので、そのあたりも調べてます。
用語
用語を知っているといないでは、理解の進みが違うと思うので、先に軽く触れておきます。
- UTC・・・協定世界時。順番が変だけど、Coordinated Universal Timeの略。
- DST・・・Daylight Saving Timeの略。夏時間のこと。三文字だけど、時刻ではない。
- JST・・・日本標準時。UTC+9。
- EST・・・東部標準時。UTC-5。東部とあるけど、アメリカの東部のこと。ニューヨーク州とかが含まれる。Eastern Standard Timeの略。
- EDT・・・東部夏時間。UTC-4。Eastern Daylight Timeの略。ESTの時刻を1時間進めた時刻。
- 等時帯・・・共通の時刻を使う地域全体のこと。UTCが共通のものさしで、それぞれの時間帯にJSTとかESTとか名称がついてる。
(Wikiより)
ESTとEDTの切り替わり
- 3月の第2回目の日曜日の午前2:00(EST)になると夏時間の午前3:00(EDT)に切り替わる(1時間時計の針を進める)
- 11月の最初の日曜日の午前2:00(EDT)になると(1時間時計の針を戻して)午前1:00(EST)に切り替わる
アメリカ東部と日本との時差
- 非サマータイム期間
EST <---(-5)--- UTC ---(+9)---> JST
- サマータイム期間
EDT <---(-4)--- UTC ---(+9)---> JST
サマータイム期間でないときは、時差は14時間だけど、サマータイム期間は時差は13時間になる。 サマータイムにより1時間時計の針を進めるので、時差は1時間縮まることになる。
例を上げると、アメリカの現地時間で一年を通じて9-17営業の店があったとすると、当たり前だがUTCに対して常に+9でスライドしている日本からすれば、 サマータイム期間中はその店の営業時間が非サマータイム期間よりも1時間早く始まって1時間早く終わるように見える。 (というか実際そうしていて、サマータイムを導入することによって現地人を錯覚させている。)
なので、UTCまたはJST基準で現地の営業時間を考慮するときは、非サマータイムの時刻から-1すれば(1時間針を戻せば)良い。 (サマータイム採用国が勝手に進めた)針の時刻を戻す必要があるということ。等時帯を変形させていると考えた方が良いかもしれない。
ちなみにアメリカは、サマータイムの期間の方が一年を通して長い。もはやどっちが標準なのかという気がする。
コーディングでの取り扱い
pytz.timezone('US/Eastern')
とすると、現地時間を出力する。サマータイムも考慮してくれる(日時に応じて、ESTとDSTの切り替えをしてくれる)。
import pytz
from datetime import datetime
est = pytz.timezone('US/Eastern')
utc = pytz.utc
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
winter = datetime(2016, 1, 24, 18, 0, 0, tzinfo=utc)
summer = datetime(2016, 7, 24, 18, 0, 0, tzinfo=utc)
print(winter.strftime(fmt))
print(summer.strftime(fmt))
# 2016-01-24 18:00:00 UTC+0000
# 2016-07-24 18:00:00 UTC+0000
print(winter.astimezone(est).strftime(fmt))
print(summer.astimezone(est).strftime(fmt))
# 2016-01-24 13:00:00 EST-0500
# 2016-07-24 14:00:00 EDT-0400
時差計算ツール
今アメリカは何時?とかなら暗算はできるけど、過去のある時点は何時?になるとサマータイムまで入ってくると結構ややこしい。
時差計算ツールは結構便利。
所感
導入当時は、石炭の消費量を減らすためだったらしいけど、寧ろ日中の方が活動的になって経済活動は活発化すると思う。
当初とは導入の背景が変わっている気がする。当初の目的が本当にそうだったのかも怪しいけど。
国際競争力も高まるのかな?個人的には、強制的に早起きさせる、もしくは普通に起きても寝坊していると錯覚させてしまうようなルールには反対。