Rails 的时区正确使用方法
如果你使用 Rails 开发应用,你一定遇到过时间显示不正确的问题,也就是时区问题。 下面我简单说明一下如何在 Rails 中正确使用时间、时区问题。
原理简介
Rails 已经为我们考虑到了时间问题。Rails 框架中存在两套时区的配置:
第一套是应用程序的时区
在 application.rb 文件中有一个时区的配置
1 2 |
|
这个配置文件是告诉 应用程序里面使用的时区是北京东八区(针对中国的应用就这样配置好了)。
第二套是数据库的存储的时区
同样在 application.rb 文件中
1 2 |
|
代表数据库中时区也用第一套, 一般情况下我们可以不做这个设置(即不添加这行到 application.rb 中)。 如果我们的应用是考虑到国际化的话也不应该指定这个配置。
这两套时区之间Rails为我们做了自动转换。
读取
rails 在将时间类型的数据存入数据库的时候会自动把时间转换成 UTC 时间, 表现的现象是: 你在表单里面填写的时间要比在数据库中直接看到的时间多8个小时。
存入
当我们的程序从数据库读取出时间字段的时候 Rails也会自动的将时区转换为应用程序的时区。
这个逻辑理解了之后,我们可以很容易控制时间的比对等问题了。
程序中时间使用的注意
再程序中正确的使用时间方法是:
1 2 3 4 5 |
|
1 2 3 4 5 |
|
如何强制的把程序中 Time.current 的时区从第一套转换为第二套呢? 方法也很简单:
1
|
|
当你想直接把时间带入sql语句比对时间的时候一定不要忘了做这个转换,否则您的时间比对就不正确了。
时区时间问题也就差不多了。了解了就不难。