rails 3:如何从hash创建时间,如time.local,但将hash解释为位于不同的时区



给定一个包含时间和日期的哈希,当哈希是其他时区时,我如何创建一个UTC时间对象?

例如,我的用户是EST,并指定"2012年8月25日15:04"(通过视图中的select_datetime),因此时间隐含为EST。

当他们提交表格时,time_hash={"day"=>"25"、"month"=>"8"、"year"=>"2012"、"hour"=>"15"、"minute"=>"04"}

如果我设置

the_time = Time.local params[:date][:year], params[:date][:month], params[:date][:day], params[:date][:hour], params[:date][:minute]

它创建了一个时间对象,它是2012年8月25日15:04,但在SERVER的本地时间(太平洋),而不是用户的本地时间。

注意:我之前确实用同样的方法将Time.zone设置为Eastern,所以我认为Time.local会将哈希解释为Eastern时间,但事实并非如此。我还尝试了Time.zone.local,但这会引发一个错误。

Time.zone.local

应该可以正常工作。它比Time.local有点挑剔,只接受整数作为参数,而Time.local不介意字符串。在那里撒一些对to_i的调用,你应该会没事的。

一个技巧似乎是:使用Time.zone.parse,这也意味着手动将哈希转换为"YYYY-MM-DD HH:MM:00"格式。

the_time = Time.zone.parse("#{params[:date][:year]}-#{params[:date][:month]}-#{params[:date][:day]} #{params[:date][:hour]}:#{params[:date][:minute]}:00")

最新更新