MySQLのタイムゾーンを使いこなして、世界を制覇しよう!
MySQLで現在のタイムゾーンを取得する方法
@@session.time_zone システム変数を使用する
最も簡単な方法は、@@session.time_zone
システム変数を使用することです。この変数は、現在のセッションで設定されているタイムゾーンを返します。
SELECT @@session.time_zone;
CURRENT_TIME()
または CURRENT_TIMESTAMP()
関数は、現在の時刻を返します。これらの関数は、現在のセッションのタイムゾーンに基づいて時刻を返します。
SELECT CURRENT_TIME();
SELECT CURRENT_TIMESTAMP();
TIME_ZONE()
関数は、指定されたタイムゾーンの現在の時刻を返します。
SELECT TIME_ZONE('America/Los_Angeles');
GET_ZONE_OFFSET()
関数は、現在のセッションのタイムゾーンとUTCとのオフセットを返します。
SELECT GET_ZONE_OFFSET();
INFORMATION_SCHEMA
データベースには、タイムゾーンに関する情報を含むいくつかのテーブルがあります。これらのテーブルを使用して、現在のタイムゾーンを含むすべてのタイムゾーンのリストを取得できます。
SELECT * FROM INFORMATION_SCHEMA.TIME_ZONES;
- 現在のセッションのタイムゾーンを取得するだけの場合は、
@@session.time_zone
システム変数を使用するのが最も簡単です。 - 現在の時刻を取得する場合は、
CURRENT_TIME()
またはCURRENT_TIMESTAMP()
関数を使用するのが最も簡単です。 - 特定のタイムゾーンの現在の時刻を取得する場合は、
TIME_ZONE()
関数を使用する必要があります。 - 現在のセッションのタイムゾーンとUTCとのオフセットを取得する場合は、
GET_ZONE_OFFSET()
関数を使用する必要があります。 - すべてのタイムゾーンのリストを取得する場合は、
INFORMATION_SCHEMA
テーブルを使用する必要があります。
補足
- MySQL 5.6 以前では、デフォルトのタイムゾーンは
SYSTEM
でした。MySQL 5.7 以降では、デフォルトのタイムゾーンはUTC
です。 - タイムゾーンは、
my.cnf
ファイルまたはSET TIME ZONE
ステートメントを使用して設定できます。
例
# セッションのタイムゾーンを設定
SET TIME ZONE 'America/Los_Angeles';
# 現在のセッションのタイムゾーンを取得
SELECT @@session.time_zone;
# 現在の時刻を取得
SELECT CURRENT_TIME();
# 特定のタイムゾーンの現在の時刻を取得
SELECT TIME_ZONE('Asia/Tokyo');
# 現在のセッションのタイムゾーンとUTCとのオフセットを取得
SELECT GET_ZONE_OFFSET();
# すべてのタイムゾーンのリストを取得
SELECT * FROM INFORMATION_SCHEMA.TIME_ZONES;
# セッションのタイムゾーンを設定
SET TIME ZONE 'Asia/Tokyo';
# 現在のセッションのタイムゾーンを取得
SELECT @@session.time_zone;
# 現在の時刻を取得
SELECT CURRENT_TIME();
# 特定のタイムゾーンの現在の時刻を取得
SELECT TIME_ZONE('America/Los_Angeles');
# 現在のセッションのタイムゾーンとUTCとのオフセットを取得
SELECT GET_ZONE_OFFSET();
# すべてのタイムゾーンのリストを取得
SELECT * FROM INFORMATION_SCHEMA.TIME_ZONES;
# セッションのタイムゾーンを設定
SET TIME ZONE 'Asia/Tokyo';
# 現在のセッションのタイムゾーンを取得
SELECT @@session.time_zone;
+-----------------------------+
| @@session.time_zone |
+-----------------------------+
| Asia/Tokyo |
+-----------------------------+
# 現在の時刻を取得
SELECT CURRENT_TIME();
+-----------------------------+
| CURRENT_TIME() |
+-----------------------------+
| 2024-03-29 13:16:00.000000 |
+-----------------------------+
# 特定のタイムゾーンの現在の時刻を取得
SELECT TIME_ZONE('America/Los_Angeles');
+-----------------------------+
| TIME_ZONE('America/Los_Angeles') |
+-----------------------------+
| 2024-03-29 04:16:00.000000 |
+-----------------------------+
# 現在のセッションのタイムゾーンとUTCとのオフセットを取得
SELECT GET_ZONE_OFFSET();
+-----------------------------+
| GET_ZONE_OFFSET() |
+-----------------------------+
| 9 |
+-----------------------------+
# すべてのタイムゾーンのリストを取得
SELECT * FROM INFORMATION_SCHEMA.TIME_ZONES;
... (省略) ...
説明
- 最初の
SET TIME ZONE
ステートメントは、セッションのタイムゾーンをAsia/Tokyo
に設定します。 - 2 番目の
SELECT
ステートメントは、現在のセッションのタイムゾーンを取得します。 - 4 番目の
SELECT
ステートメントは、America/Los_Angeles
タイムゾーンの現在の時刻を取得します。
他の方法
TIME_ZONE()
関数と FROM_UNIXTIME()
関数を組み合わせて、現在の時刻を特定のタイムゾーンで取得することができます。
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), TIME_ZONE('America/Los_Angeles'));
CONVERT_TZ()
関数は、指定されたタイムゾーンから別のタイムゾーンへの時刻変換を行います。
SELECT CONVERT_TZ(CURRENT_TIME(), 'Asia/Tokyo', 'America/Los_Angeles');
SELECT SEC_TO_TIME(TIMEDIFF(CURRENT_TIME(), UTC_TIME()));
外部ライブラリ
MySQL にはタイムゾーン機能が組み込まれていますが、外部ライブラリを使用することもできます。
X 0 まとめ
MySQLで現在のタイムゾーンを取得するには、いくつかの方法があります。どの方法を使用するかは、要件によって異なります。
mysql timezone