rails 3:如何从散列创建时间,如Time.local,除了将散列解释为在不同的时区?

时间:2012-08-25 19:22:45

标签: ruby-on-rails datetime

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

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

当他们提交表单时,time_hash = {“day”=>“25”,“month”=>“8”,“year”=>“2012”,“hour”=>“15 “,”分钟“=>”04“}

如果我设置

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

它创建一个时间对象,即15:04 8/25/2012 - 但是在SERVER的本地时间(太平洋),而不是用户的本地时间(东部)。

注意:我在相同的方法中将Time.zone设置为较早,所以我认为Time.local会将哈希解释为东部时间,但事实并非如此。我也尝试过Time.zone.local,但是会抛出错误。

2 个答案:

答案 0 :(得分:1)

Time.zone.local

应该可以正常工作。它比Time.local更挑选,只接受整数作为参数,而Time.local不介意字符串。在那里打一些电话给to_i,你应该没问题。

答案 1 :(得分:0)

似乎有一个技巧:使用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")