确定 1967 年之前美国城市的夏令时

问题描述 投票:0回答:1

我正在解决一个问题,我需要获取日期时间并获取它们的 UTC 偏移量。 我得到的数据是日期、时间以及经度和纬度。

我目前正在使用 pytz 和 timezonefinder 来查找时区并获取 utc 偏移量

def get_utc_offset_from_obj(datetime_obj: datetime, timezone) -> str:
    timezone = pytz.timezone(timezone)
    localized_date = timezone.localize(datetime_obj)
    offset = localized_date.utcoffset()
    total_minutes = int(offset.total_seconds() / 60)
    hours, minutes = divmod(abs(total_minutes), 60)
    sign = '-' if total_minutes < 0 else '+'
    formatted_offset = f"{sign}{hours:02d}:{minutes:02d}"
    return formatted_offset

问题在于,显然在 1967 年之前,美国各州没有统一的夏令时,因此在同一时区内,有些州或县可能采用夏令时,有些则可能不采用。这使得上面的代码不准确。

例如,德克萨斯州属于美洲/芝加哥时区,但在 1945 年至 1966 年期间,它没有采用夏令时。如果我从坐标中获取时区,然后获取 UTC 偏移量,它将告诉我该时区采用了 DST。

我想知道 timezonefinder 或 pytz 是否可以给我我正在寻找的数据。

正如我提到的,我尝试将地理坐标转换为时区,然后获取特定日期与该时区的 utc 的偏移量。它不起作用,因为对于美国来说,时区发生了变化,在同一时区内,不同的州(有时甚至同一州内的不同县)可能会选择切换到夏令时,而其他州则不会。

python timezone dst timezone-offset
1个回答
0
投票

你应该有两个模块:Python的标准模块zoneinfo(从Python3.9开始可用)+ timezonefinder。

pip install timezonefinder

来自文档:

zoneinfo 模块提供了具体的时区实现来支持 IANA 时区数据库。

检查此链接:https://docs.python.org/3/library/zoneinfo.html

计算给定坐标和时间的偏移量的代码示例:

from datetime import datetime
from zoneinfo import ZoneInfo
from timezonefinder import TimezoneFinder

datetime_object = datetime(1965, 4, 8, 0, 0, 0)  # July 1, 1965
latitude = 4.9686 
longitude = -1.9018 

tf = TimezoneFinder()
timezone_name = tf.timezone_at(lat=latitude, lng=longitude)

timezone = ZoneInfo(timezone_name)

localized_date = datetime_object.astimezone(timezone)
offset = localized_date.utcoffset()

print("UTC Offset:", offset)
© www.soinside.com 2019 - 2024. All rights reserved.