在 Rails 中,在特定时区创建特定时间(不是现在)的最佳方法是什么?



这是一种方法,但你能想到一个更惯用的方法吗?

>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00

我想你正在寻找

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

这也适用于解析

Time.find_zone('Sydney').parse('2011-04-12 2pm')
=> Tue, 12 Apr 2011 14:00:00 EST +10:00 

要解析特定时区内的日期,您可以使用 ActiveSupport::TimeZone

> ActiveSupport::TimeZone["Sydney"].parse("2011-04-12 2pm")
=> Tue, 12 Apr 2011 14:00:00 EST 10:00

时区 API 文档在这里:http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-5B-5D

这是我

使用的:

Time.zone.local(2011, 4, 12, 14, 0)

如上所述,要在特定时区创建时间(例如,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

当它保存到您的数据库时,它将被转换为 UTC(至少在 Postgres 中,如果在迁移中使用时间戳类型),并且在将来访问时,它将相对于 config/application.rb 中设置的应用程序时区显示

为了正确显示本地时间,我们还将时区名称(例如,"东部时间(美国和加拿大)")存储在我们的数据库中。因此,当我们想在我们的视图中打印时间时,我们确实...

@event.start_time.in_time_zone(@event.timezone)
 => Thu, 10 Apr 2014 13:30:00 EDT -04:00 

获取缩写时区(例如,EST)

@event.start_time.in_time_zone(@event.timezone).zone
=> "EDT" 

如何使用 *in_time_zone* 助手。

Time.now.in_time_zone('Sydney')

相关内容

  • 没有找到相关文章

最新更新