見出し画像

【ITエンジニア】タイムゾーンはどう扱えばいいか?

こんにちは、ITエンジニア教育のスクータムです。
今回はタイムゾーンについて書いていきたいと思っています。

きっかけ

Webエンジニア向けに学習ロードマップを書いていた時に、タイムゾーンについて記載をしました。

この時にふと、「Webシステムで、タイムゾーンはどう扱うのがいいのだろうか?」と思ったためです。
いざ振り返ってみると、どう扱うのがベストなのだろうか?
と思い、筆を取りました。

タイムゾーンとは何か

どこかに厳密な定義とかないものか?と思っていたのですが、どうも見つかりませんでした。(規格とかあればご教授いただきたいです)

仕方ないので、Wikipediaを見てみました。

等時帯(とうじたい)とは、共通の標準時常用時を使う地域全体のことである[1]。その地域の標準時や常用時を示す際には協定世界時(UTC)との差で示すことが多い。時間帯(じかんたい)、時刻帯(じこくたい)、タイムゾーン: time zone)、標準時間帯(ひょうじゅんじかんたい)ともいう。

等時帯 - Wikipedia

世界標準時からの差を取って表現するそうです。
日本だと、UTC+9時間で表現されますね。

時刻の表記: ISO8601

関連する話として、日付と時刻の表記方法の規格です。
ISO8601にてきちんと決められていて、これらにそって時刻を扱うことが多いです。
(Web APIとかを利用した時によくみる印象があります。)

タイムゾーンの種類

日本に住んでいれば、JST(日本時間)が馴染み深いと思います。
また、UTC(標準時)もよくみると思います。

どう扱うのがいいか?

それで、ITエンジニアとしてはどう関わるのか?という話になります。
当然ながら、作成するサービスが国内だけで完結するとは言い切れませんし、国外のプロジェクトだと、現地の時間を考慮しないといけません。

私の経験

・DBにはUTCで記録する
・アプリケーション側で現地時間を表現する
という感じで実装していました。

あれ、でもこの場合、グローバル展開したらどうなるんだろうか?
と悩み、ほかの事業者がどうしているのかみてみました。

ほかの人のブログとかを確認

ユーザーの入力について、オフセット付きの時刻表記でDBに保存する…
ということをやっていました。

タイムゾーンを扱っているtz databaseがそれなりに変更→リリースされているので、だったらオフセット付き時刻表記で保存する…
というアイデアみたいです。

※間違っていたらすみません

国外サービスにも関連したことはあるのですが、UTC統一で保存して、現地時間に変換するのみでした…(ある1カ国での運用だったため)
今後↑のような設計も考えてみようと思っています。

まとめ

自分としては、オフセット付き時刻表記を前向きに検討してみようと思います。(一応グローバル展開を考える!)

とはいえ、時刻設計を考えるべきサービスかどうか…ってところもあるかなーと思いました。
→初めての個人でのちょっとしたアプリ開発なら、JST固定でもいいかも?(勉強がてら本格的に実装するのも良いですが)

参考

タイムゾーンを考慮した日時の扱いのベストプラクティス - エムスリーテックブログ

タイムゾーンをちゃんと理解しておこう #タイムゾーン - Qiita

世界の時差について|時計の知識 | シチズンウオッチ オフィシャルサイト [CITIZEN-シチズン]

すごく細かく書かれている記事。
タイムゾーン呪いの書 #timezone - Qiita

ISO8601 について

宣伝

ITエンジニア教育サービスを展開中です。
関心があれば、

をご覧ください!

サポートいただけますと幸いです。さらなる励みにして精進します。