添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

システム開発での日付・時刻の扱い方

(引用サイト: PostgreSQL 15.4文書 )

タイムゾーンの変更は、 postgresql.conf から行うことができます。 (デフォルト設定は GMT ですが、 postgresql.conf で上書きされます。変更後は、PostgreSQL の再起動が必要です。)

Terminal window
timezone = 'UTC'
# logのタイムゾーン
log_timezone = 'UTC'

データベース毎にタイムゾーンを変更する場合は、クエリ実行を行います。

ALTER DATABASE <DB名> SET timezone TO 'Asia/Tokyo';

MySQL

MySQLで日付・時刻を扱えるデータ型は下記です。MySQL 8.0.19 から下記の値をテーブルに挿入時にタイムゾーン・オフセットを指定できるようになりました。

型名 説明 最遠の過去 最遠の未来 精度
DATETIME 日付と時刻 1000-01-01 00:00:00.000000 9999-12-31 23:59:59.999999 マイクロ秒(6桁)
TIMESTAMP 日付と時刻 1970-01-01 00:00:01.000000 2038-01-19 03:14:07.999999 マイクロ秒(6桁)

(参考サイト : MySQL documentation )

タイムゾーンの変更は、 my.cnf から行うことができます。 (デフォルト設定はホストマシンのタイムゾーンです。)

Terminal window
default-time-zone = 'UTC'

ここまで、それぞれタイムゾーンの設定の仕方や時刻の取り扱い方について触れてきました。 以下でまとめます。

  • REST APIに格納する時刻にはタイムゾーン情報を付与すること
  • フォーマットは、 ISO 8601 及び RFC 3339 の基準を使用し、サーバ側と表記の解釈を合わせること
  • サーバ側で時刻を扱う際はタイムゾーン情報の付いたデータ型を利用すること
  • Webアプリケーションの時刻の扱いにおいて重要なことは、一連の流れで見たときにタイムゾーンの設定や形式が一貫していることです。もし、タイムゾーンが一貫しておらず、JavaではJSTで扱っているがDBではUTCで格納しているとなると意図しない値が保存され、その値を取り出したときに正常な値として使えなくなり、のちに大きなトラブルに繋がります。タイムゾーンの設定が適したものになっているか、変換の際にタイムゾーン・オフセット情報が抜け落ちていないか確認しましょう。

    この記事では、システム開発での日付・時刻の扱い方について紹介しました。

    これから開発で時刻を取り扱うという方の一助になりましたら幸いです。

    参考サイト

  • 国立研究開発法人情報通信研究機構「NICT NEWS No.451」
  • 暦Wiki
  • Java公式HP ( LocalDateTime , OffsetDateTime , ZonedDateTime )
  • PostgreSQL公式HP ( 8.5. 日付/時刻データ型 )
  • MySQL公式HP ( 11.2.2 DATE、DATETIME、および TIMESTAMP 型 , 5.1.15 MySQL Server でのタイムゾーンのサポート )
  •