我的Rails 5应用程序设置为BRT(巴西时区),我的Postgres数据库设置为UTC。我从来不必担心这一点,因为Rails总是在读取或写入数据库时计算正确的时间。因此,例如当我有一个带time = 15:00
的输入字段时,它会将18:00
写入数据库,当从数据库中读取时,它将再次返回15:00
。完美!
但现在我想把月初写入数据库:
Time.now.beginning_of_month
,2017-04-01 00:00:00
Payment.create(
:time => Time.now.beginning_of_month
)
现在它将此(在BRT中)写入数据库而不转换为UTC。当我稍后从数据库中读取它时,它会将其转换为错误的BRT 2017-03-31 21:00:00
。
当然我可以在将时间保存到数据库之前将时间转换为UTC。但我觉得奇怪的是Rails总是负责转换,在这种情况下它不会。
我希望问题变得清晰。
有什么想法吗?
答案 0 :(得分:0)
我发现了一篇关于这个主题的非常好的文章:
https://www.varvet.com/blog/working-with-time-zones-in-ruby-on-rails/
基本上我必须将Time.now
更改为Time.current
,因为Time.now会忽略时区设置。