【问题标题】:convert date time from EU time zone to PST将日期时间从欧盟时区转换为 PST
【发布时间】:2015-02-09 19:07:26
【问题描述】:

我有一个欧盟时区的日期时间列表:

[u'2014-11-01T09:00:00+01:00', u'2014-11-02T00:00:00+01:00', u'2014-11-03T00:00:00+01:00', u'2014-11-04T00:00:00+01:00', u'2014-11-05T00:00:00+01:00', u'2014-11-06T00:00:00+01:00', u'2014-11-07T00:00:00+01:00', u'2014-11-08T00:00:00+01:00', u'2014-11-09T00:00:00+01:00', u'2014-11-10T00:00:00+01:00', u'2014-11-11T00:00:00+01:00', u'2014-11-12T00:00:00+01:00', u'2014-11-13T00:00:00+01:00', u'2014-11-14T00:00:00+01:00', u'2014-11-15T00:00:00+01:00', u'2014-11-16T00:00:00+01:00', u'2014-11-17T00:00:00+01:00', u'2014-11-18T00:00:00+01:00', u'2014-11-19T00:00:00+01:00', u'2014-11-20T00:00:00+01:00', u'2014-11-21T00:00:00+01:00', u'2014-11-22T00:00:00+01:00', u'2014-11-23T00:00:00+01:00', u'2014-11-24T00:00:00+01:00', u'2014-11-25T00:00:00+01:00', u'2014-11-26T00:00:00+01:00', u'2014-11-27T00:00:00+01:00', u'2014-11-28T00:00:00+01:00', u'2014-11-29T00:00:00+01:00', u'2014-11-30T00:00:00+01:00', u'2014-12-01T00:00:00+01:00']

如何将它们中的每一个转换为 PST 时区?

【问题讨论】:

  • 考虑使用dateutilpytzAmerica/Los_Angeles 时区。 (Dateutil 也将帮助解析。)

标签: python datetime timezone pytz rfc3339


【解决方案1】:

应该这样做:

from pytz import timezone
import pytz
from dateutil.parser import parse

l = [u'2014-11-01T09:00:00+01:00', u'2014-11-02T00:00:00+01:00', u'2014-11-03T00:00:00+01:00', u'2014-11-04T00:00:00+01:00', u'2014-11-05T00:00:00+01:00', u'2014-11-06T00:00:00+01:00', u'2014-11-07T00:00:00+01:00', u'2014-11-08T00:00:00+01:00', u'2014-11-09T00:00:00+01:00', u'2014-11-10T00:00:00+01:00', u'2014-11-11T00:00:00+01:00', u'2014-11-12T00:00:00+01:00', u'2014-11-13T00:00:00+01:00', u'2014-11-14T00:00:00+01:00', u'2014-11-15T00:00:00+01:00', u'2014-11-16T00:00:00+01:00', u'2014-11-17T00:00:00+01:00', u'2014-11-18T00:00:00+01:00', u'2014-11-19T00:00:00+01:00', u'2014-11-20T00:00:00+01:00', u'2014-11-21T00:00:00+01:00', u'2014-11-22T00:00:00+01:00', u'2014-11-23T00:00:00+01:00', u'2014-11-24T00:00:00+01:00', u'2014-11-25T00:00:00+01:00', u'2014-11-26T00:00:00+01:00', u'2014-11-27T00:00:00+01:00', u'2014-11-28T00:00:00+01:00', u'2014-11-29T00:00:00+01:00', u'2014-11-30T00:00:00+01:00', u'2014-12-01T00:00:00+01:00']
amsterdam = timezone('Europe/Amsterdam')
pst = timezone('US/Pacific')
[parse(d).replace(tzinfo=amsterdam).astimezone(pst) for d in l]

【讨论】:

  • 不要使用.replace(tzinfo=amsterdam)'Europe/Amsterdam' 在不同时间有多个 UTC 偏移量。 .replace() 方法选择了错误的 UTC 偏移量
【解决方案2】:

有两个独立的任务:

  1. 将 rfc 3339 日期/时间格式解析为可感知的日期时间对象

    >>> from dateutil.parser import parse
    >>> aware_dt = parse('2014-11-01T09:00:00+01:00')
    >>> aware_dt
    datetime.datetime(2014, 11, 1, 9, 0, tzinfo=tzoffset(None, 3600))
    
  2. 将其转换为America/Los_Angeles 时区

    >>> import pytz
    >>> tz = pytz.timezone('America/Los_Angeles')
    >>> tz.normalize(aware_dt.astimezone(tz))
    datetime.datetime(2014, 11, 1, 1, 0, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2012-12-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多