いろいろ作るよ

IT、電子工作、裁縫

mysqlのタイムゾーンがUTCでapplication.rbのconfig.time_zone=localの場合、date/datetimeをgroupするとタイムゾーンがUTC使われる件

Model.group("date(convert_tz(created_at,'UTC','[your_time_zone]'))").countをやったときに

configに設定しているtime_zoneではなくてUTCで帰ってくる。


対応↓

mysqlで、タイムゾーンの設定が読み込まれているか確認する

↓NULLが返ってきたら読み込む作業を行う必要がある
mysql> select convert_tz(now(), 'UTC', 'Asia/Tokyo'));

                                                                    • +
convert_tz(now(), 'UTC', 'JST')
                                                                    • +
NULL
                                                                    • +

mysql> select convert_tz(now(), 'UTC', 'Asia/Tokyo');

                                                                                  • +
convert_tz(now(), 'UTC', 'Asia/Tokyo')
                                                                                  • +
2015-06-30 22:28:22
                                                                                  • +

1 row in set (0.00 sec)


読み込み作業


convert_tzがnilを返してくる場合shellコマンドラインで、実行
MySQL :: MySQL 5.5 Reference Manual :: 10.6 MySQL Server Time Zone Support
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

warningが出て、そのwarningがでたtime_zoneが必要な場合は要調査。
使わないtime_zoneのwarningなら無視でOK


以下でNULL以外が帰れば、OKconvert_tzが使える。
mysql> select convert_tz(now(), 'UTC', 'Asia/Tokyo');

                                                                                  • +
convert_tz(now(), 'UTC', 'Asia/Tokyo')
                                                                                  • +
2015-06-30 22:28:22
                                                                                  • +

1 row in set (0.00 sec)




↓ありがとうございましたstackoverflow.com