タイムゾーン
Time zone
そもそもタイムゾーンとは?
各国で国際協定時(UTC)との時差を取り扱うための方法
タイムゾーンは誰が決めている?
各国政府が、適用する地域と時差を決める。
タイムゾーンの正式な情報はどこを見たら分かる?
最も正確なのは各国政府の政府広報
IANA のタイムゾーンデータベース
https://www.iana.org/time-zones
IANA のTZコーディネーターが保守をしている。(政府とは無関係)
タイムゾーンの名前について(特に略称型の問題について)
タイムゾーンは現在では3~4文字の略称コードではなく、'地域名/都市名' が正式になっている。
日本標準時は tzfile 上は Asia/Tokyo という表記が正式。JST は古い。
別名で Japan があることも。
略称型のコード、つまり3~4文字のコードはサマータイムも含んでしまっているので望ましくない。(EST、EDTなど)
サマータイムを出したいのか、あえてサマータイムを使わないローカル時間を出したいのかが不明瞭になってしまうので、タイムゾーン指定用には向かない。今、どのタイムゾーンが適用されているかの表示まではできる。
また、国ごとに異なる事(統治主体で決定されるため)、国の中でも都市(地域)ごとに異なる事(複数のタイムゾーンがある国がある)、略称を見てもほとんど分からないことを考えると、略称型では限界がある。
つまり、設計ミス。今の地域名/都市名で書いているのもやや設計ミス。国/都市名(地域名)が望ましい形のはず。
(この場合、正式に国として認められていない一部の地域での問題はある。)
タイムゾーン名の長さの最大長は?
https://stackoverflow.com/questions/12546312/max-length-of-tzname-field-timezone-identifier-name
今の所存在するタイムゾーン名の最大は28
明確な定義はない。
システムから返される文字列長をそのまま使えばいいのではないか? (不定長データで扱えるならそれでいいのでは?)
.NET Framework では 32 バイト(文字?)が推奨されている。
タイムゾーンの問題点
タイムゾーンは、政府によって決定されるため、厳密には「過去から未来までずっと同じタイムゾーン」と考えるのは正しくない。このため、システムに設定するタイムゾーンは「現在のタイムゾーン」として設定するしかない。
もし本気で設定するならば、そのサーバーが存在する(あるいは管理者が期待する)緯度経度を指定して、タイムゾーンを決定することになるだろう。
システムのタイムゾーンの取得方法
システムが対応するタイムゾーンの一覧
参考
タイムゾーン呪いの書 (知識編) https://zenn.dev/dmikurube/articles/curse-of-timezones-common-ja
タイムゾーン呪いの書 (実装編) https://zenn.dev/dmikurube/articles/curse-of-timezones-impl-ja
タイムゾーン呪いの書 (Java 編) https://zenn.dev/dmikurube/articles/curse-of-timezones-java-ja
マイクロソフトには、世界中の時刻を監視する「時の番人」がいる https://wired.jp/2017/12/27/microsoft-time-lords/
9時間足すんだっけ引くんだっけ問題~あるいは、諸プログラミング言語はいかにタイムゾーンと向き合っているか https://www.m3tech.blog/entry/time-types
「South Ryukyu Islandsの謎」調査の中間報告 および 最終報告 http://www.tomo.gr.jp/root/9925.html