我希望能够解析可能在PST或PDT中的日期字符串 根据夏令时。这意味着日期将是半年 是PST,另一半是PDT。
这是我现在的代码:
DateTime.parse('2016-02-21 10:00:02 PST/PDT')
这只会将日期解析为PST(GMT-8)。
如何自动解析PST / PDT中的日期+时间?
谢谢!
答案 0 :(得分:3)
请注意:
DateTime.parse(' 2016-02-21 10:00:02 PST / PDT')将始终解析为PST(标准时间),就像DateTime.parse一样(' 2016- 02-21 10:00:02 PDT')将始终解析为PDT(白天时间)。这是因为DateTime&时间库期望时区是明确的,而不是PST / PDT'这是说'我可能是x或y'。如果它更聪明,它可以解决这两个在同一区域和它们是夏令时等价物,但遗憾的是不是在这一刻。
一些选择: 1)使用时区gem将时间转换为本地区域 2)根据年份手动输入PST或PDT
我倾向于以UTC格式存储所有日期/时间并根据需要进行翻译。
我使用TZInfo gem根据当地时间显示/计算。它使用here
中的时区recorded_time = Time.now.getutc
tz = TZInfo::Timezone.get('US/Pacific')
local_created_at = tz.utc_to_local(recorded_time)
如果您已经在DateTime中存储了数据,或者您的入站数据已经以这种方式标记,那么现在这不会解决您的问题。如果是,我建议你根据日期解析它。您可以使用以下数据创建查找表:http://www.timeanddate.com/time/zone/usa/los-angeles
编辑:刚刚意识到TZinfo能够为您解决这个问题:
tz = TZInfo::Timezone.get('US/Pacific')
=> #<TZInfo::DataTimezone: US/Pacific>
tz.local_to_utc(Time.parse('2016-07-21 10:00:02 PST/PDT'))
=> 2016-07-21 17:00:02 UTC
tz.local_to_utc(Time.parse('2016-02-21 10:00:02 PST/PDT'))
=> 2016-02-21 18:00:02 UTC