10

テーブルの単純なバージョンを次に示しますusers

+--------------+-------------------+
|      id      |     timezone      |
+--------------+-------------------+
|       1      | 'Europe/Helsinki' |
|       2      |  'Europe/Paris'   |
+--------------+-------------------+

たとえば、午後 4 時のユーザーを選択できるように、これらのユーザーのそれぞれの現地時間を (タイム ゾーンに応じて) 知りたいと考えています。

私は LAMP スタックを使用していますが、MySQL のみを使用してそれを行いたいと思います (すべてのユーザーを選択して PHP ループで実行するのではありません)。

4

3 に答える 3

9

これには CONVERT_TZ を使用します: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz

SELECT * FROM users WHERE hour(CONVERT_TZ(now(), server_tz, `timezone`))=16
于 2012-09-21T13:54:08.017 に答える
6

次の方法でタイムゾーンを変更できますset time_zone

mysql> set time_zone='Europe/Helsinki';
mysql> select now();
2012-09-21 16:15:06
mysql> set time_zone='Europe/Paris';
mysql> select now();
2012-09-21 15:15:40

これを使用して、たとえば、ユーザーのタイムゾーンの現在の時刻を返す関数を定義できます。

create function current_time_in_tz(tz varchar(40)) returns datetime 
begin
set @old_tz = @@session.time_zone;
set time_zone=tz;
set @now = now();
set time_zone=@old_tz;
return @now;
end

select id, current_time_in_tz(timezone) from users;

DATE、TIME、および DATETIME の値はタイム ゾーンに依存しないため、これらの型の列の値はクエリ時に自動的に調整されないことに注意してください。TIMESTAMP 値が調整されます。

mysql> create temporary table tbl (dt datetime, ts timestamp);
mysql> insert into tbl values (now(),now());
mysql> select * from tbl;
+---------------------+---------------------+
| dt                  | ts                  |
+---------------------+---------------------+
| 2012-09-21 15:21:56 | 2012-09-21 15:21:56 |
+---------------------+---------------------+
mysql> set time_zone='Europe/Helsinki';
mysql> select * from tbl;
+---------------------+---------------------+
| dt                  | ts                  |
+---------------------+---------------------+
| 2012-09-21 15:21:56 | 2012-09-21 16:21:56 |
+---------------------+---------------------+

set time_zoneこのエラーで失敗した場合:

ERROR 1298 (HY000): Unknown or incorrect time zone: 'Europe/Helsinki'

次のようなコマンドを使用して、タイム ゾーン情報を mysql にロードする必要があります。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

詳細については、http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.htmlを参照してください。

于 2012-09-21T13:17:25.223 に答える