Jac*_*cka 2 ruby time datetime ruby-on-rails zone
我正在使用datetimepicker,需要将从params获得的字符串datetime保存到特定于用户的特定时区中的datetime。这将使我可以将适当的UTC日期时间保存到数据库中。
params[:notify_at] #=> "2014-07-05 14:30:00"
user.time_zone #=> #<ActiveSupport::TimeZone:0x00000007535ac8 @name="Warsaw", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Europe/Warsaw>, @current_period=nil>
Run Code Online (Sandbox Code Playgroud)
我想做些类似的事情:
date = params[:notify_at].to_datetime(user.time_zone) #=> Sat, 05 Jul 2014 12:30:00 +0000
(its 14:30 in user's localtime but 12:30 in UTC)
Run Code Online (Sandbox Code Playgroud)
您可以使用in_time_zone方法。例如:
DateTime.current.in_time_zone("Alaska")
# => Fri, 23 May 2014 07:21:30 AKDT -08:00
Run Code Online (Sandbox Code Playgroud)
因此,对于您的用例:
params[:notify_at].to_datetime.in_time_zone(user.time_zone)
Run Code Online (Sandbox Code Playgroud)
专业提示:如果使用Rails v4 +,则实际上可以直接在字符串上执行此操作:
"2014-07-05 14:30:00".in_time_zone("Alaska")
# => Sat, 05 Jul 2014 14:30:00 AKDT -08:00
Run Code Online (Sandbox Code Playgroud)
更新
您可以像这样将字符串直接解析到时区(该字符串应已在该时区中):
Time.zone.parse("2014-07-05 14:30:00")
# => Sat, 05 Jul 2014 14:30:00 CEST +02:00
Run Code Online (Sandbox Code Playgroud)
因此,对于您的用例,请执行以下操作:
user.time_zone.parse(params[:notify_at])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4584 次 |
| 最近记录: |