我已经设置了
config.time_zone = 'Berlin'
config.active_record.default_timezone = :local
在“application.rb”和restartet WEBrick Webserver中“重新启动”(rake db:drop; rake db:migrate)我的数据库。
如果我检查数据库中的条目,一切正常,“created_at”正确保存在我的Localtimezone中:
sqlite> select created_at from docversions;
2011-08-22 23:27:51.138723
sqlite>
但在这种情况下,这个“本地时区”不起作用:
(creat.html.erb)
<%= form_for :token, :url => {:action => "save_token"}, :docversion_id => params[:id] do |f| %>
<%= f.datetime_select :validuntil, :order => [:day, :month, :year, :hour, :minute], :default => 3.days.from_now, %>
<%= f.submit %>
(tokenadmin_controller.rb)
class TokenadminController < ApplicationController
def save_token
@token = Token.new
civildate = DateTime.civil(params[:token]["validuntil(1i)"].to_i,
params[:token]["validuntil(2i)"].to_i,
params[:token]["validuntil(3i)"].to_i,
params[:token]["validuntil(4i)"].to_i,
params[:token]["validuntil(5i)"].to_i)
@token.validuntil = civildate
if @token.save
flash[:notice] = "Token created."
redirect_to :controller => :tokenadmin, :action => :admin
else
flash[:error] = "Token could not be saved!"
redirect_to :controller => "index"
end
end
end
它似乎将保存为UTC:
sqlite> select validuntil, created_at from tokens;
2011-08-22 01:44:00.000000|2011-08-22 23:44:20.640434
sqlite>
如您所见,created_at正确保存为Localtime,但validuntil保存为+ 2h(但我选择的时间与create_at ;-)相同)。我认为它是+ 2h,因为它是在UTC + 1和DST UTC + 2的时区。现在在DST。
这是一个错误,还是我做错了什么?
感谢您的帮助。
从“BaronVonBraun”发布后更新:
谢谢!它现在正在工作。 Databasefield仍然是“时间戳”:
t.timestamp :validuntil
控制器代码,用于创建时间字段:
在:
civildate = DateTime.civil(params[:token]["validuntil(1i)"].to_i,
params[:token]["validuntil(2i)"].to_i,
params[:token]["validuntil(3i)"].to_i,
params[:token]["validuntil(4i)"].to_i,
params[:token]["validuntil(5i)"].to_i)
后:
civildate = Time.parse("#{params[:token]["validuntil(1i)"].to_s}-#{params[:token]["validuntil(2i)"].to_s}-#{params[:token]["validuntil(3i)"].to_s} #{params[:token]["validuntil(4i)"].to_s}:#{params[:token]["validuntil(5i)"].to_s}")
答案 0 :(得分:3)
DateTime
个对象默认为GMT / UTC(+0000偏移量)。
如果您想将本地时区与日期对象一起存储,我建议使用Time
而不是DateTime
,这应该使用您在Rails配置中设置的时区。< / p>
如果您需要继续使用DateTime
,则可以回答另一个问题:How do I alter the timezone of a DateTime in Ruby?。但是,在该解决方案中,它将时区设置为硬偏移量,这意味着它无法处理进出DST。