スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PostgreSQLのtime zoneについて

PostgreSQLで文字列から時間に直すPL/pgSQLを書いていた時に気づきました。

select '2001-01-01'::timestamp with time zone;
→"2001-01-01 00:00:00+09"

普通、このように+09がtime zoneとして設定されるますよね。
しかし、古い年月でこのSQLを実行すると、

select '1001-01-01'::timestamp with time zone;
→"1001-01-01 00:00:00+09:18:59"

このように、9時18分59秒がtime zoneとして設定されます。
なんじゃこりゃ? バグ? と思って色々年を変えて調べてみると

select '1887-01-01'::timestamp with time zone;
→"1887-01-01 00:00:00+09:18:59"

select '1888-01-01'::timestamp with time zone;
→"1888-01-01 00:00:00+09"

どうやら、1887年以前から9時18分59秒になってしまっているようです。
ここで、バグと思って早とちりした私はPostgreSQLのバグ報告してしまいました。
そしたら、Tom LaneさんというPostgreSQLのコアメンバの方(PostgreSQLのボスみたいな人じゃん!)から返事が来ました。曰く。

「Olson timezone databaseに従ってるんで、文句あるならそっちを変更してもらって」

メールには、そのデータベースの編集のやり取りが引用されていました。
私も原典に当たってみて、調べてみました。

一部、翻訳付きで引用してみます。

# Japan

# `9:00' and `JST' is from Guy Harris.

# From Paul Eggert (1995-03-06):
# Today's _Asahi Evening News_ (page 4) reports that Japan had
# daylight saving between 1948 and 1951, but ``the system was discontinued
# because the public believed it would lead to longer working hours.''

# From Mayumi Negishi in the 2005-08-10 Japan Times
# :
# Occupation authorities imposed daylight-saving time on Japan on
# [1948-05-01].... But lack of prior debate and the execution of
# daylight-saving time just three days after the bill was passed generated
# deep hatred of the concept.... The Diet unceremoniously passed a bill to
# dump the unpopular system in October 1951, less than a month after the San
# Francisco Peace Treaty was signed. (A government poll in 1951 showed 53%
# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
# wanted to keep it.)

# From Paul Eggert (2006-03-22):
# Shanks & Pottenger write that DST in Japan during those years was as follows:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# but the only locations using it (for birth certificates, presumably, since
# their audience is astrologers) were US military bases. For now, assume
# that for most purposes daylight-saving time was observed; otherwise, what
# would have been the point of the 1951 poll?

# From Hideyuki Suzuki (1998-11-09):
# 'Tokyo' usually stands for the former location of Tokyo Astronomical
# Observatory: E 139 44' 40".90 (9h 18m 58s.727), N 35 39' 16".0.
# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'
# edited by National Astronomical Observatory of Japan....
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
# The law is enacted on 1886-07-07.

通常'Toyko'で表される、以前の東京天文台の位置は東経139 44' 40".90 (9h 18m 58s.727)、北緯N 35 39' 16".0です。
このデータは、日本の国立天文台が作成した理科年表1996によるものです。
JST(日本標準時)は、1886年7月7日に成立した法律により、1888年1月1日0時0分から使われます。

# From Hideyuki Suzuki (1998-11-16):
# The ordinance No. 51 (1886) established "standard time" in Japan,
# which stands for the time on E 135 degree.
# In the ordinance No. 167 (1895), "standard time" was renamed to "central
# standard time". And the same ordinance also established "western standard
# time", which stands for the time on E 120 degree.... But "western standard
# time" was abolished in the ordinance No. 529 (1937). In the ordinance No.
# 167, there is no mention regarding for what place western standard time is
# standard....
#
# I wrote "ordinance" above, but I don't know how to translate.
# In Japanese it's "chokurei", which means ordinance from emperor.

法令51号(1886年)により、日本の「標準時」が東経135度と制定された。
法令167号(1895年)により、「標準時」の呼び名は「中央標準時」に変更された。
そして、同じ法令で「西部標準時」が東経120度と制定された。
しかし、「西部標準時」は法令529号(1937年)に破棄された。
法令167号では、西部標準時を表す場所に関する記述が存在しない。

# Shanks & Pottenger claim JST in use since 1896, and that a few
# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all
# ordinances took effect on Jan 1.

# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
9:00 - JST 1896
9:00 - CJT 1938
9:00 Japan J%sT
# Since 1938, all Japanese possessions have been like Asia/Tokyo.

ネットで色々調べてみると、このやり取りをされていた鈴木さんのページがありました。この原典へのリンクも鈴木さんのページにあります。

で、まとめますと、
1. PostgreSQLのtime zoneはOlson timezone databaseに従っている。
2. time zoneは場所と時代により確定する。(今までは場所だけで確定すると思っていました)
3. 日本の(東京の)time zoneは1887年まで+9:18:59である。
4. 日本の(東京の)time zoneは1888年から+9:00:00である。

歴史的経緯とそもそもtime zoneって、どうやってできてるのかって私は全々知りませんでしたので、非常に勉強になりました。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。