我正在解决一个问题,我需要获取日期时间并获取它们的 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的标准模块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)