0

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

例如,我的用户是 EST 并指定“15:04 8/25/2012”(通过视图中的 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 - 但在服务器的本地时间(太平洋),而不是用户的本地时间(东部)。

注意:我之前在同一方法中确实将 Time.zone 设置为东部时间,所以我认为 Time.local 会将哈希解释为东部时间,但事实并非如此。我也试过 Time.zone.local 但这会引发错误。

4

2 回答 2

2
Time.zone.local

应该可以正常工作。它比选择器稍微好一点,Time.local并且只接受整数作为其参数,Time.local而不介意字符串。在那里打一些电话to_i,你应该没问题。

于 2012-08-25T22:22:04.513 回答
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")
于 2012-08-25T22:07:54.493 回答