Post Load (0.3ms) SELECT `posts`.* FROM `posts` ORDER BY `posts`.`id` DESC LIMIT 1
=> #
1.9.3-p286 :014 > p.created_at
=> Thu, 01 Nov 2012 13:39:26 CST +08:00
大家注意到了吗,在p=Post.last之后查询的结果显示created_at的时间是utc时间,但是等你敲入p.created_at之后,显示的值就变成了本地时间。 总结
时区以及日期的格式化是每个程序员的必修课,就像字符串的各种处理一样重要,而且使用频率很高。
rails默认就是写入utc时间,然后读取也是utc时间。
设置config.time_zone只能保证写入数据库的时间是local,就是保证创建对象的时候created_at和updated_at使用设置的本地时间。
但是读出来的时候还是有可能是utc时间,有可能需要在界面上转换的。
rails推荐使用utc时间,这样就统一了,只是在界面显示的时候格式化为本地时间。
对于任何应用来说,遇到时区问题,都应该考虑语言本身和存储本身,甚至是操作系统本身的时区设置和一些默认值,这样才能最终较好的解决时区问题。 参考文献
1.Convert local time to UTC in Rails
2.Rails 3 default datetime format without UTC
3.rails 有关时区的设置的问题
4.Date Time Format in RUBY
5.rails time format
6.完美解决rails中国时区时间设置
7.Time Zones in Rails 2.1
8.MySQL时区设置
9.Rails内置的时间格式化