确定当前太平洋时区是 PST 还是 PDT

问题描述 投票:0回答:1

我们有一些 Ruby(在 Rails 上下文中)可以将表示的时间整数解析为日期时间,并且我们需要确保将日期时间解析为太平洋时间:

DateTime.new(2012, 11, 17, 3, 2, 0, 'PST')

但是我们需要将其更改为 PDT 〜半年。我们如何在运行时判断是否应该通过 PST 还是 PDT?

ruby-on-rails ruby timezone
1个回答
0
投票

您不应尝试自行判断是否通过 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))
    
  • 特别是在 Rails 中,您可以使用

    ActiveSupport::TimeZone
    类,尽管我不推荐它。

    tz = ActiveSupport::TimeZone['Pacific Time (US & Canada)']
    dt = tz.local(2012, 11, 17, 3, 2, 0)
    

    不推荐此方法的原因在timezone tag wiki中描述,位于最底部标题为“Rails 时区标识符”的部分。唉,如果您有一个应用程序需要它们 - 它们仍然存在于 Rails 中。

© www.soinside.com 2019 - 2024. All rights reserved.