使用beginnig_of_month

时间:2017-04-28 14:40:17

标签: ruby-on-rails postgresql datetime ruby-on-rails-4 ruby-on-rails-5

我的Rails 5应用程序设置为BRT(巴西时区),我的Postgres数据库设置为UTC。我从来不必担心这一点,因为Rails总是在读取或写入数据库时​​计算正确的时间。因此,例如当我有一个带time = 15:00的输入字段时,它会将18:00写入数据库,当从数据库中读取时,它将再次返回15:00。完美!

但现在我想把月初写入数据库:

Time.now.beginning_of_month2017-04-01 00:00:00

Payment.create(
  :time => Time.now.beginning_of_month
)

现在它将此(在BRT中)写入数据库而不转换为UTC。当我稍后从数据库中读取它时,它会将其转换为错误的BRT 2017-03-31 21:00:00

当然我可以在将时间保存到数据库之前将时间转换为UTC。但我觉得奇怪的是Rails总是负责转换,在这种情况下它不会。

我希望问题变得清晰。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我发现了一篇关于这个主题的非常好的文章:

https://www.varvet.com/blog/working-with-time-zones-in-ruby-on-rails/

基本上我必须将Time.now更改为Time.current,因为Time.now会忽略时区设置。