これらから、サーバの中は全部 UTC で管理し、UI で時間を出すときにエンドユーザのタイムゾーンに対応に合わせる、という風にしています。内部時間と外部時間という感じでしょうか。エンドユーザのタイムゾーンは IP アドレスから推定する有料サービスで得ています。
この仕組みですと、まず UTC なのでサマータイムの問題がありません。さらに、エンドユーザのタイムゾーンから UTC に変換するときと、UTC からエンドユーザのタイムゾーンに変換すべきときが明確で、間違いを起こしづらいです。それ以外の内部での時間管理やサードパーティーとの通信は全て UTC でやりとりするので、サマータイムやら、日付が変わるタイミングの統一やらが簡単です。[*1] また、エンドユーザの地域がどこであったとしても、必ず同じように時間変換をしないといけないので不具合が起きづらいです。[*2]
[*1] 例えば、分析機能を提供するサードパーティが「昨日広告をクリックしたユーザは 300,000 人だよ」とレポートをくれたとして、その「昨日」が厳密に何時から何時までなのか知らないと分析がしづらいです。それが弊社内部と同じ時間帯だと都合が良いので、全てのサードパーティーで「日替わりのデータは UTC 基準にしてくれ」と設定しています。
私は全部 UTC です (スコア:0)
米国西海岸在住(PDT/PST の時間帯に含まれる場所)の米国人です。
私が管理しているサーバ(80 台程度)は全部 UTC にしています。
前任者時代は会社がシカゴだったので最初は米国中部 CST/CDT 時間で管理していました。やがて、会社ごと米国西海岸に引っ越しましたが、サーバの設定を不用意に変えることが出来ずそのまま使っていました。私が入社したのはその頃でしたが、OS のバージョンアップをする際に、サーバは UTC にすべしと(強固に)主張し、それが通って今に至ります。
米国では4つのタイムゾーンがあり、従業員も様々なタイムゾーンに住んでいます。また、自社サービスのユーザは全世界にいるので、それぞれのタイムゾーンに対応する必要があります。またサマータイムによって年に一回だけ23時間の日と25時間の日があったりで、色々と面倒です。
これらから、サーバの中は全部 UTC で管理し、UI で時間を出すときにエンドユーザのタイムゾーンに対応に合わせる、という風にしています。内部時間と外部時間という感じでしょうか。エンドユーザのタイムゾーンは IP アドレスから推定する有料サービスで得ています。
この仕組みですと、まず UTC なのでサマータイムの問題がありません。さらに、エンドユーザのタイムゾーンから UTC に変換するときと、UTC からエンドユーザのタイムゾーンに変換すべきときが明確で、間違いを起こしづらいです。それ以外の内部での時間管理やサードパーティーとの通信は全て UTC でやりとりするので、サマータイムやら、日付が変わるタイミングの統一やらが簡単です。[*1] また、エンドユーザの地域がどこであったとしても、必ず同じように時間変換をしないといけないので不具合が起きづらいです。[*2]
[*1] 例えば、分析機能を提供するサードパーティが「昨日広告をクリックしたユーザは 300,000 人だよ」とレポートをくれたとして、その「昨日」が厳密に何時から何時までなのか知らないと分析がしづらいです。それが弊社内部と同じ時間帯だと都合が良いので、全てのサードパーティーで「日替わりのデータは UTC 基準にしてくれ」と設定しています。
[*2] 例えば、タイムゾーンが US/Pacific のサーバだったとすると、「もしエンドユーザが US/Pacific ならば時間変換なし。そうでなければ、US/Pacific からエンドユーザのタイムゾーンに時間変換すべし」となります。開発者が US/Pacific 在住の場合、これを忘れたときの不具合に気づきづらいです。サーバが UTC だと、エンドユーザのタイムゾーンに関係なく「UTC からエンドユーザのタイムゾーンに変換すべし」となり、if-else の分岐文がありません。間違えにくいです。
Re:私は全部 UTC です (スコア:1)
ご教示有難うございます。
うーん、やはりUTCかな。
正直なところ、もしも政府が正気ならサマータイムは否決されるはずなんで、それほどは心配してないですけど、ウチが今後なんかの拍子に世界中に手を出すことになったらどうしたもんかとは悩んでいました。
今までは日本から出るつもりもなかったからプログラムソースの中身も日本語だらけだしなあ……メッセージボックスの直書きも全部リソース化しないと……何年かかるんだ、これ。
あと英語のコメントなんて書けないぞ ;; (←英語はなんとか読めるようになったけど、いまだに書けない. )