Gab*_*mbe 41 time timezone ruby-on-rails ruby-on-rails-3
这是一种方式,但你能想到更好或更"邋"的方法吗?
>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Run Code Online (Sandbox Code Playgroud)
tox*_*xaq 35
我想你在找
Time.find_zone('Alaska').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 AKST -09:00
Time.find_zone('Amsterdam').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 CET +01:00
Time.find_zone('Sydney').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 EST +11:00
Time.find_zone('Wellington').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 NZDT +13:00
Run Code Online (Sandbox Code Playgroud)
这也适用于解析
Time.find_zone('Sydney').parse('2011-04-12 2pm')
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Run Code Online (Sandbox Code Playgroud)
Nic*_*dge 29
要解析特定时区内的日期,可以使用ActiveSupport :: TimeZone
> ActiveSupport::TimeZone["Sydney"].parse("2011-04-12 2pm")
=> Tue, 12 Apr 2011 14:00:00 EST 10:00
Run Code Online (Sandbox Code Playgroud)
TimeZone API文档位于:http: //api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-5B-5D
小智 6
如上所述,要在特定时区创建时间(例如,2014年4月10日下午1:30纽约):
@event.start_time = Time.find_zone('Eastern Time (US & Canada)').local(2014,4,10,13,30)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
@event.start_time.utc
=> 2014-04-10 17:30:00 UTC
Run Code Online (Sandbox Code Playgroud)
当它保存到您的数据库时,它将转换为UTC(至少如果在迁移中使用时间戳类型,则在Postgres中),并且在将来访问时,它将相对于config/application.rb中设置的应用程序时区显示
为了正确显示当地时间,我们还将时区名称(例如,"东部时间(美国和加拿大)")存储在我们的数据库中.所以,当我们想要在视图中打印时间时,我们会......
@event.start_time.in_time_zone(@event.timezone)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
Run Code Online (Sandbox Code Playgroud)
获取缩短的时区(例如,EST)
@event.start_time.in_time_zone(@event.timezone).zone
=> "EDT"
Run Code Online (Sandbox Code Playgroud)