如何将日期时间从一个任意时区转换为另一个任意时区

2024-04-23

假设我在请求中收到一个任意日期时间对象,如下所示,它可能来自任何可能的时区 - 我不知道是哪一个。 举例来说,假设它来自东海岸

import pytz
from colander import iso8601
...
    ests1 = iso8601.parse_date('2016-04-01T00:00:00.0000-04:00')

假装 ests1 是传入的对象

使用 pytz,我可以了解一些有关它的时区的信息

    etz = ests1.timetz()  # 00:00:00-04:00
    etzi = ests1.tzinfo   # <FixedOffset '-04:00' datetime.timedelta(-1, 72000)>
    etzn = ests1.tzname() # '-04:00'  # EST
    edst = ests1.dst()    #  '0:00:00'

请注意,无论 ests1 是什么日期 - dst() 似乎总是返回相同的值

我想做这样的事情:

    psts1 = pytz.timezone(etzn
                     ).localize(dtime.datetime.fromtimestamp(ests1)
                     ).astimezone(pytz.timezone('US/Pacific'))

但这只会导致

UnknownTimeZoneError: '-04:00'

我也尝试过这个:

def convert_dt_to_pstz(dt):
    pstoffset = -25200 # -7 * 60 * 60   - but what about DST?  how do we tell which offset to use? -8 or -7
    return dt.astimezone(tzoffset(None,pstoffset)) # convert to PST

但问题是我不知道如何判断日期是否需要根据夏令时进行调整。

我也尝试过这个:

    utc_date = ests1.astimezone(pytz.utc)   # 2016-04-01T04:00:00+00:00
    ptz = pytz.timezone('US/Pacific')
    new_date = utc_date.replace(tzinfo=ptz) # 2016-04-01T04:00:00-07:53

但是看看 new_date 的奇怪结果:-07:53 ??

请注意,我无法使用与“现在”或服务器位置相对应的任何信息,因为它可能位于任何地方


转换时区感知datetime对象进入不同的时区,use datetime.astimezone() method https://docs.python.org/3/library/datetime.html#datetime.datetime.astimezone:

pacific_time = ests1.astimezone(pytz.timezone('US/Pacific'))

一般来说,pytz docs http://pytz.sourceforge.net/#localized-times-and-date-arithmetic建议致电pytz.timezone('US/Pacific').normalize()关于结果,但你在这里不需要它,因为ests1时区有固定的 utc 偏移量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将日期时间从一个任意时区转换为另一个任意时区 的相关文章

随机推荐