1. ホーム
  2. mysql

MySQL は、保存された UTC 時間をローカル タイムゾーンに変換できますか?

2023-07-13 16:03:52

質問

MySQL は、通常の select 文で、保存された UTC 時間をローカル タイムゾーン時間に直接変換することができますか?

タイムスタンプ(UTC)を持ついくつかのデータがあるとします。

CREATE TABLE `SomeDateTable` (
  `id`    int(11) NOT NULL auto_increment,
  `value` float NOT NULL default '0',
  `date`  datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
)

次に、私が

"select value, date from SomeDateTable";

もちろん、保存されているUTC形式の日付はすべて取得します。

しかし、別のタイムゾーン(夏時間あり)で取得したいとします。 選択したタイムゾーンですべての日付を取得するために、select クエリに何らかのマジックを追加することは可能ですか?

"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";

それとも、PHPのコードのように、上の他の層でこれをしなければならないのでしょうか? (ほとんどの人がこの問題を解決した方法だと思われます)。


MySQL のインストールで CONVERT_TZ を使用できる場合、それは非常にクリーンなソリューションです。 この例では、それを使用する方法を示します。

SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )

ただし、MySQLのインストールによっては、この機能がない場合があるので、この方法が良いのかどうかはわかりません。

どのように解決するのですか?

そう、そこにあるのは convert_tz という関数があります。