我有
Rails 3.0.9
Activerecord-sqlserver-adapter 3.0.15
TinyTds
MSSQL 2005
我在使用Time.now时遇到问题
这就是我在控制台中所做的事情:
有人可以解释这种行为吗?
irb(main):026:0> row = Eclaim.where(:id => 1).first
=> #<Eclaim id: 1, id_user: 1, property: "inv", app_number: nil, patent_number:
nil, native_number: nil, title: nil, applicants: nil, receive_date: nil, change_
date: "2012-05-08 10:20:44">
irb(main):027:0> row[:change_date] = Time.now
=> 2012-05-08 13:37:13 +0300
irb(main):028:0> row.save
=> true
irb(main):029:0> row = Eclaim.where(:id => 1).first
=> #<Eclaim id: 1, id_user: 1, property: "inv", app_number: nil, patent_number:
nil, native_number: nil, title: nil, applicants: nil, receive_date: nil, change_
date: "2012-05-08 10:37:13">
irb(main):047:0> Time.zone
=> (GMT+00:00) UTC
为什么我在数据库中输入日期 2012-05-08 10:37:13 而不是 2012-05-08 13:37:13 +0300 ?
答案 0 :(得分:3)
我找到了解决方案:
在application.rb
中,您应该编写以下设置:
config.time_zone = 'Riga'
config.active_record.default_timezone = :local
答案 1 :(得分:0)
我不是约会专家,但如果你改成像这样的话,会发生什么呢?
> row[:change_date] = Time.now.localtime
> row.save
我认为这会给出正确的结果。至于为什么会发生这种情况(我的2美分):
应始终将日期存储在某些标准中(人们似乎对于什么格式不同)。但是请注意,当存储时间为utc时,您需要将时间显示为本地时间(轻松完成)。在上面的示例中,rails会自动转换为utc并存储它。希望它有所帮助
修改
Rails我认为仍默认为utc时间(不知道如何更改)。但是从数据库中的utc时间你可以调用localtime。如果你调用这个
会发生什么Eclaim.first.change_date.localtime
这是我可以考虑从存储在数据库中的utc获取本地时间的唯一方法。
答案 2 :(得分:0)
ActiveRecord以UTC(以前称为GMT)存储日期。格式化日期时,它会将日期转换回本地时区。在Eclaim.where(:id =&gt; 1)之后。首先,执行row.change_date。
irb(main):029:0> row = Eclaim.where(:id => 1).first
irb(main):029:0> row.change_date