原来在rails 2.0.2下搞程序,时间都是对的,用了rails 2.3.2后,由于时间格式化一直用的是nice形式的时间格式(刚刚、XX分钟前、XX小时前),没注意到时间实际上是8小时前的时间,今天突然发现数据库里每条记录的时间竟然是8小时前的。。。吃惊不小。
查了一下,有篇翻译的文章写的挺全的:http://t0uch.iteye.com/blog/184194
原来是由于environment.rb文件中有个设定:config.time_zone = 'UTC'。
于是,赶紧去控制台执行:rake time:zones:local
立即把environment.rb中的config.time_zone设为:config.time_zone = 'Beijing',重启服务器,刷新网页,一切OK了,时间显示正常。
翻看数据库,发现表里的时间没变,还是UTC的时间,8小时前,这怎么行呢?
因为程序中有些地方不得不使用find_by_sql,而且中间会有时间比较条件,所以,绝不能用8小时前这种UTC时间,怎么办?
翻看原来的rails 2.0.2下的工程,发现其中的config.time_zone设定是被注释掉的,于时回到当前工程,将config.time_zone设定注释掉,重启服务器,刷新网页,插入一条记录,看看数据库,时间是当前系统时间,再看看页面,是直接取得数据库里存储的时间,哈哈,终于一切OK啦!爽!
PS.如果表中存在设定了UTC时区时的数据,在对这样的数据进行修改时,updated_at不会自动更新。