我们有一些Ruby(在Rails上下文中),它将表示的时间整数解析为日期时间,我们需要确保日期时间被解析为太平洋时间:
DateTime.new(2012, 11, 17, 3, 2, 0, 'PST')
然而,我们需要将其更改为PDT~半年.我们如何在运行时判断我们应该通过PST还是PDT?
我们有一些Ruby(在Rails上下文中),它将表示的时间整数解析为日期时间,我们需要确保日期时间被解析为太平洋时间:
DateTime.new(2012, 11, 17, 3, 2, 0, 'PST')
然而,我们需要将其更改为PDT~半年.我们如何在运行时判断我们应该通过PST还是PDT?
你不应该试图自己决定是否通过PST或PDT(或它们的等值补偿).相反,请使用时区标识符,例如从the IANA tz database开始的时区标识符(例如,美国太平洋时间为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中,您can使用了ActiveSupport::TimeZone
类,尽管我不推荐这样做.
tz = ActiveSupport::TimeZone['Pacific Time (US & Canada)']
dt = tz.local(2012, 11, 17, 3, 2, 0)
不推荐这种方法的原因在timezone tag wiki中描述,在最下面标题为"Rails时区标识符"的一节中.遗憾的是,如果您的应用程序需要它们--它们仍然存在于Rails中.