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