如果,在你的Rails项目中数据库的设置是如下:
config.active_record.default_timezone = :utc#Rails2.1
config.time_zone = 'UTC'#rails 2.3
那么通常情况下,这时你就要注意你的Rails查询中的时区问题了。
例如,通常的查询如下:
User.count(:conditions => ['created_at BETWEEN ?
AND ?',some_day.beginning_of_day,
some_day.end_of_day])
这时候是不用特别注明时区的。可是如果,有如下的显示的时候。
some_day.beginning_of_day
#>e.g. 00:00 on March 26th CET
你就应该用如下的方式查询
User.count(:conditions => ['created_at BETWEEN ?
AND ?', some_day.beginning_of_day.utc,
some_day.end_of_day.utc])
然而,如果你有另外的需求,希望通过本地的local时间来group那么,你需要的就是如下的类似查询:
User.count(:group => 'DATE(CONVERT_TZ(created_at, "UTC", "CET"))')
也就是说,如果不这样写的话默认的就会用UTC的时间来分组,很可能就是你在3月26号00:59 CET创建的记录,就会分组到25号了。
那么,如何设置Mysql的时区呢,如下:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
Mac如下
mysql_tzinfo_to_sql5 /usr/share/zoneinfo | mysql -u root mysql
当然你也完全不必转换,那么你需要在程序里转UTC或特别处理