rails 中的时区介绍

默认情况下 rails 存取时间都会转换为UTC时间。
 
###    to_datetime 
 
rails的model中有timestamp,但是有时存储的时间和本地时间不同,需要在config/application.rb中加入:
config.active_record.default_timezone = :local  
config.time_zone 设置应用的时区,ActiveRecord 取时间时根据这个设置自动转换
config.active_record.default_timezone = :local rails 往数据库存时间时根据time_zone配置的时区存时间。
default_timezone应该和time_zone一起使用并且time_zone应该在default_timezone前面。
 
注意在rails console 中 显示Model Object的时候 时间调用了 TimeWithZone#to_s(:db),此时显示的是utc时间,不一定是数据库存储的时间。可以使用pry-rails
复制代码
def to_s(format = :default)
  if format == :db
    utc.to_s(format)
  elsif formatter = ::Time::DATE_FORMATS[format]
    formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
  else
    "#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}" # mimicking Ruby Time#to_s format
  end
end
复制代码

 

建议:
在往数据库存数据的时候default_timezone使用UTC,time_zone根据情况设置。
因为存的是UTC时间在以后更方便转换成任意时区,尤其是系统面向多个时区时,在向别的系统提供数据时也更方便。


作者:就叫初九吧
链接:https://www.jianshu.com/p/d49d8c4be131
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @   鞋带松了  阅读(90)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示