Ruby on rails Rails时间和日期时间之间的时区差异
我已经设定了时区Ruby on rails Rails时间和日期时间之间的时区差异,ruby-on-rails,ruby,ruby-on-rails-3,datetime,time,Ruby On Rails,Ruby,Ruby On Rails 3,Datetime,Time,我已经设定了时区 config.time_zone = 'Mountain Time (US & Canada)' 正在从控制台创建圣诞活动 c = Event.new(:title => "Christmas") 使用时间: c.start = Time.new(2012,12,25) => 2012-12-25 00:00:00 -0700 #has correct offset c.end = Time.new(2012,12,25).end_of_day
config.time_zone = 'Mountain Time (US & Canada)'
正在从控制台创建圣诞活动
c = Event.new(:title => "Christmas")
使用时间:
c.start = Time.new(2012,12,25)
=> 2012-12-25 00:00:00 -0700 #has correct offset
c.end = Time.new(2012,12,25).end_of_day
=> 2012-12-25 23:59:59 -0700 #same deal
使用日期时间:
c.start = DateTime.new(2012,12,25)
=> Tue, 25 Dec 2012 00:00:00 +0000 # no offset
c.end = DateTime.new(2012,12,25).end_of_day
=> Tue, 25 Dec 2012 23:59:59 +0000 # same
我不小心使用了DateTime,认为输入被假定在config.time\u区域中,但当它保存到db时没有转换。它的存储方式与返回值(针对db格式化)完全相同
使用时间其实没什么大不了的,但我是否需要在使用DateTime的任何时候手动进行偏移,并希望它位于正确的区域?是的。在没有特定时区的情况下,将参数解释为本地时间;在没有特定时区的情况下,将参数解释为UTC。如文件所述。您可能需要将Time.new
替换为Time.local
,以使代码更清晰
您可以使用DateTime
调用Time.local(2012,12,25).to\u DateTime
。但是,如果年/月/日来自用户/浏览器,那么您可能应该获取用户/浏览器的时区,而不是使用服务器的时区
如果您需要创建迁移来修复数据库中的现有数据,
new\u date\u time=time.local(old\u date\u time.year、old\u date\u time.mon、old\u date\u time.mday、old\u date\u time.hour、old\u date\u time.min、old\u date\u time.sec)。感谢。你能告诉我这是哪里记录的吗?我没有看到api文档中提到它。我添加了文档的链接。对于DateTime.new
偏移量的默认值为0
。