lka*_*ono 1 postgresql timezone datetime ruby-on-rails
我有一个表,其中有一个名为date. 在执行 POST 以插入新行时,从客户端(浏览器)发送的日期看起来2015-11-20T14:30:00+10:00实际上是正确的日期和时区。
但是,在 Postgres 中,此日期已插入为2015-11-20 04:30:00.000000,如您所见,与上面的完全不同。我知道问题与时区有关。但我似乎无法找到解决办法。
有关信息,我已经配置了我的应用时区:
class Application < Rails::Application
config.time_zone = 'Brisbane'
end
Run Code Online (Sandbox Code Playgroud)
想法?
2015-11-20T14:30:00+10:00表示当地时间14:30比 UTC 早 10 小时。您的数据库字段反映了正确的 UTC 值04:30。这通常是所需的行为,特别是如果该值表示时间戳- 某事发生的日期和时间(过去时)。
在 PostgreSQL 中,有两种不同类型的时间戳字段(参考)
该TIMESTAMP WITH TIME ZONE字段接受包含时区偏移的输入。然后将值转换为 UTC 进行存储。在检索时,它使用会话的 timezone设置。
的TIMESTAMP,或TIMESTAMP WITHOUT TIME ZONE干脆将被赋予的日期和时间,忽略任何偏移,而不是转换为UTC。
大多数情况下,您确实应该使用TIMESTAMP WITH TIME ZONE. 仅TIMESTAMP WITHOUT TIME ZONE当需要保留本地日期和时间值时才应使用,例如在安排未来事件和计算营业时间时。对于那些场景,往往更有意义,分割日期和时间成单独DATE和TIME领域。
最后一件事 - 如果可以避免,请避免使用Rails 时区并使用标准tzdb 区域。“Australia/Brisbane”是完整的 tzdb 标识符,相当于 Rails 的“布里斯班”时区。请参阅时区标记 wiki底部有关 Rails 时区的部分。
| 归档时间: |
|
| 查看次数: |
3142 次 |
| 最近记录: |