ruby-on-rails - 在 ruby​​ 中以任意 gmt 偏移量解析时间

标签 ruby-on-rails ruby ruby-on-rails-3 parsing timezone

<分区>

我在 Rails 3.2 中运行,但我想不出一个很好的方法来解析在任意时区给我的时间。

例如,这是我在单独的键中给出的格式

{
  "start_date"=>"2013-04-24 13:00:00",
  "timezone"=>"America/Los_Angeles",
  "timezone_offset"=>"GMT-0700",
  ...
}

This question非常接近回答:

time = ActiveSupport::TimeZone.new('UTC').parse('2010-02-05 01:00:01')

问题是当我输入“America/Los_Angeles”作为 Timezone.new 的参数时,它显示出 GMT-8 时区,我认为是由于夏令时的变化。另一方面,我收到的数据定义了与 GMT 的时区偏移量。因此,对于我的示例,所需的输出是 GMT-7 时区。

如果我知道 gmt 偏移量而不是使用时区名称,有什么方法可以获取时区?

最佳答案

您可以在 ActiveSupport::Timezone 上使用 [],将以小时为单位的 gmt 偏移量作为参数传递。

见于 api.rubyonrails.org :

[](参数)

Locate a specific time zone object. If the argument is a string, it is interpreted to mean the name of the timezone to locate. If it is a numeric value it is either the hour offset, or the second offset, of the timezone to find. (The first one with that offset will be returned.) Returns nil if no such time zone is known to the system.

代码示例:

ActiveSupport::TimeZone["America/Los_Angeles"]                              
 => (GMT-08:00) America/Los_Angeles
ActiveSupport::TimeZone[-8]                              
 => (GMT-08:00) America/Los_Angeles

那么,你要做的是:

time = ActiveSupport::TimeZone[-7].parse('2013-04-24 13:00:00')

但是,要小心,因为一个偏移量可能相当于多个时区,因为许多时区可能位于同一偏移量上。

关于ruby-on-rails - 在 ruby​​ 中以任意 gmt 偏移量解析时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441464/

相关文章:

ruby-on-rails - 在 Rails Routing 中强制尾随斜线

ruby-on-rails - 使用 Mechanize (Ruby) 进行基本和表单例份验证

ruby-on-rails - 在任何来源中都找不到 rake-10.0.4 (Bundler::GemNotFound)

ruby-on-rails - 解决 Gem::Package::TooLongFileName 问题

ruby-on-rails - mod_rails 或 Phusion Passenger 最终是 Ruby on Rails 部署的答案吗?

ruby-on-rails - rails : URL after validation fails when creating new records via form

ruby-on-rails - 如果不使用Rails,值得学习Ruby吗?

ruby - 摘要::CRC32 与 Zlib

mysql - 如何在 ruby​​ on Rails 中不使用主 ID 的情况下从数据库查询数据

ruby - HTML5 视频和 Rails 3