【ITエンジニア】タイムゾーンはどう扱えばいいか?
こんにちは、ITエンジニア教育のスクータムです。
今回はタイムゾーンについて書いていきたいと思っています。
きっかけ
Webエンジニア向けに学習ロードマップを書いていた時に、タイムゾーンについて記載をしました。
この時にふと、「Webシステムで、タイムゾーンはどう扱うのがいいのだろうか?」と思ったためです。
いざ振り返ってみると、どう扱うのがベストなのだろうか?
と思い、筆を取りました。
タイムゾーンとは何か
どこかに厳密な定義とかないものか?と思っていたのですが、どうも見つかりませんでした。(規格とかあればご教授いただきたいです)
仕方ないので、Wikipediaを見てみました。
世界標準時からの差を取って表現するそうです。
日本だと、UTC+9時間で表現されますね。
時刻の表記: ISO8601
関連する話として、日付と時刻の表記方法の規格です。
ISO8601にてきちんと決められていて、これらにそって時刻を扱うことが多いです。
(Web APIとかを利用した時によくみる印象があります。)
タイムゾーンの種類
日本に住んでいれば、JST(日本時間)が馴染み深いと思います。
また、UTC(標準時)もよくみると思います。
どう扱うのがいいか?
それで、ITエンジニアとしてはどう関わるのか?という話になります。
当然ながら、作成するサービスが国内だけで完結するとは言い切れませんし、国外のプロジェクトだと、現地の時間を考慮しないといけません。
私の経験
・DBにはUTCで記録する
・アプリケーション側で現地時間を表現する
という感じで実装していました。
あれ、でもこの場合、グローバル展開したらどうなるんだろうか?
と悩み、ほかの事業者がどうしているのかみてみました。
ほかの人のブログとかを確認
ユーザーの入力について、オフセット付きの時刻表記でDBに保存する…
ということをやっていました。
タイムゾーンを扱っているtz databaseがそれなりに変更→リリースされているので、だったらオフセット付き時刻表記で保存する…
というアイデアみたいです。
※間違っていたらすみません
国外サービスにも関連したことはあるのですが、UTC統一で保存して、現地時間に変換するのみでした…(ある1カ国での運用だったため)
今後↑のような設計も考えてみようと思っています。
まとめ
自分としては、オフセット付き時刻表記を前向きに検討してみようと思います。(一応グローバル展開を考える!)
とはいえ、時刻設計を考えるべきサービスかどうか…ってところもあるかなーと思いました。
→初めての個人でのちょっとしたアプリ開発なら、JST固定でもいいかも?(勉強がてら本格的に実装するのも良いですが)
参考
タイムゾーンを考慮した日時の扱いのベストプラクティス - エムスリーテックブログ
タイムゾーンをちゃんと理解しておこう #タイムゾーン - Qiita
世界の時差について|時計の知識 | シチズンウオッチ オフィシャルサイト [CITIZEN-シチズン]
すごく細かく書かれている記事。
タイムゾーン呪いの書 #timezone - Qiita
宣伝
ITエンジニア教育サービスを展開中です。
関心があれば、
をご覧ください!
サポートいただけますと幸いです。さらなる励みにして精進します。