我们有一些 Ruby(在 Rails 上下文中)可以将表示的时间整数解析为日期时间,并且我们需要确保将日期时间解析为太平洋时间:
DateTime.new(2012, 11, 17, 3, 2, 0, 'PST')
但是我们需要将其更改为 PDT 〜半年。我们如何在运行时判断是否应该通过 PST 还是 PDT?
您不应尝试自行判断是否通过 PST 或 PDT(或它们的等效偏移量)。相反,请使用 IANA 时区标识符(例如
America/Los_Angeles
表示美国太平洋时间),并允许该区域的基础数据确定适当的偏移量。
在 Ruby 中,有几种不同的方法可以实现这一点。
您可以使用TZInfo库:
require 'tzinfo'
tz = TZInfo::Timezone.get('America/Los_Angeles')
dt = tz.local_datetime(2012, 11, 17, 3, 2, 0)
该库已包含在 Rails 中。
您可以使用 timezone 库(尽管我不确定它与 tzinfo 有何不同)
require 'timezone'
tz = Timezone['America/Los_Angeles']
dt = tz.time_with_offset(Time.new(2012, 11, 17, 3, 2, 0))
ActiveSupport::TimeZone
类,尽管我不推荐它。
tz = ActiveSupport::TimeZone['Pacific Time (US & Canada)']
dt = tz.local(2012, 11, 17, 3, 2, 0)
不推荐此方法的原因在timezone tag wiki中描述,位于最底部标题为“Rails 时区标识符”的部分。唉,如果您有一个应用程序需要它们 - 它们仍然存在于 Rails 中。