微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数字偏移量转换为时区?

如何解决将数字偏移量转换为时区?

一个网站以例如的形式提供时区信息。 -07:00。有没有办法可以使用它来本地化 pytz 中的时间戳?

通常我这样做:

EASTERN_TIMEZONE = pytz.timezone("US/Eastern")
date_in_pacific_time = EASTERN_TIMEZONE.localize(my_date)

其中 my_date 是某个日期时间。但我不知道如何取一个数字并从中获取时区,以便我可以将其应用于日期并从中获取时间戳。

这可能是一个 XY 问题,因为我想要做的是获取"2021-04-02T18:30:04-07:00" 这样的日期字符串并将其转换为 Unix UTC 时间戳。

编辑:

喜欢吗?

listing_date_string = "2021-04-02T18:30:04-07:00"
listing_date_string_datepart = listing_date_string[:19]
listing_date_string_timezone = int(listing_date_string[19:].replace(":00",""))
d = datetime.datetime.strptime(listing_date_string_datepart,'%Y-%m-%dT%H:%M:%s')
d -= datetime.timedelta(hours=listing_date_string_timezone)

print(int(d.timestamp()))  # outputs 1617427804

解决方法

对于问题 X,它通常不可行。 但是你有一些候选时区,比如

  • 美国/太平洋地区
  • 美国/凤凰城
  • 美国/山区(与美国/丹佛相同)

所以你可以尝试每一个,看看它是否匹配 -7 小时。

有些日子丹佛是 -7 小时, 在其他日子里,洛杉矶是-7 小时。 Phoenix 始终处于 -7 小时。

请注意,时区(例如美国/山区)与区域偏移量(例如 -7 小时)完全不同。

对于问题 Y,嗯,这很简单! 只需将第一部分视为UTC, 然后应用剩余的 -7 小时修正。

,

Python - 来自 docs

在 3.7 版更改:当 %z 指令提供给 strptime() 方法,UTC 偏移量可以有一个冒号作为分隔符 在小时、分钟和秒之间。

反之亦然,这意味着对于较旧的 Python 版本,%z 不会将带有冒号的 UTC 偏移量解析为小时/分钟分隔符。你可以像这样

from datetime import datetime
# your input
s = "2021-04-02T18:30:04-07:00"
# parse separately,colon removed from UTC offset
tz = datetime.strptime(s[19:].replace(':',''),'%z').tzinfo
dtobj = datetime.strptime(s[:19],"%Y-%m-%dT%H:%M:%S").replace(tzinfo=tz)
print(repr(dtobj))
datetime.datetime(2021,4,2,18,30,tzinfo=datetime.timezone(datetime.timedelta(-1,61200)))

如果知道时区,可以跳过解析UTC偏移量:

import pytz
tz = pytz.timezone('US/Pacific')
dtobj = tz.localize(datetime.strptime(s[:19],"%Y-%m-%dT%H:%M:%S"))
print(repr(dtobj))
datetime.datetime(2021,tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day,17:00:00 DST>)

注意:pytz is deprecated 随着 Python 3.9 的发布 - 您现在在标准库中拥有 zoneinfo


Python 3.7+ 上,您只需使用 fromisoformat;

dtobj = datetime.fromisoformat(s)

并从 UTC 偏移量更改为实际时区,如

dtobj.astimezone(tz) # tz is a timezone object from pytz,dateutil,zoneinfo...
Out[9]: datetime.datetime(2021,17:00:00 DST>)
,

这对你有用吗?

import datetime

dt = datetime.datetime.strptime(
    "2021-04-02T18:30:04-07:00","%Y-%m-%dT%H:%M:%S%z"
    )
print(
    dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second,dt.tzinfo,)
2021 4 2 18 30 4 UTC-07:00

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。