如何获取Python中美国东部时间datetime对应的epoch时间戳?
获取美国东部时区datetime对应的Epoch秒数
要获取美国东部时区(America/New_York)datetime对应的自Epoch以来的秒数,核心是先确保datetime对象包含正确的时区信息,再调用其timestamp()方法即可——这个方法会自动处理时区到UTC的转换,直接返回自1970-01-01 UTC以来的秒数。
基于pytz的实现(兼容Python 3.8及以下)
你提供的代码里,astimezone(et_tz)是多余的,因为et_tz.localize()已经为无时区信息的datetime对象添加了美东时区信息。优化后的完整代码如下:
import pytz from datetime import datetime # 初始化美国东部时区对象 et_tz = pytz.timezone('America/New_York') # 为无时区的datetime添加时区信息,得到带时区的datetime对象 initial_start_dt = et_tz.localize(datetime(2024, 8, 24, 4, 0, 0)) initial_end_dt = et_tz.localize(datetime(2024, 8, 24, 5, 0, 0)) # 获取对应的Epoch秒数(浮点数,包含毫秒级精度) start_epoch = initial_start_dt.timestamp() end_epoch = initial_end_dt.timestamp() # 如果需要整数秒,可做类型转换 start_epoch_int = int(start_epoch) end_epoch_int = int(end_epoch) print(start_epoch_int) # 输出示例:1724493600 print(end_epoch_int) # 输出示例:1724497200
基于标准库zoneinfo的实现(Python 3.9+推荐)
Python 3.9及以上自带了zoneinfo库,无需安装第三方包,代码更简洁:
from datetime import datetime from zoneinfo import ZoneInfo # 初始化美国东部时区对象 et_tz = ZoneInfo('America/New_York') # 直接创建带时区的datetime对象 initial_start_dt = datetime(2024, 8, 24, 4, 0, 0, tzinfo=et_tz) initial_end_dt = datetime(2024, 8, 24, 5, 0, 0, tzinfo=et_tz) # 获取Epoch秒数 start_epoch = initial_start_dt.timestamp() end_epoch = initial_end_dt.timestamp()
关键说明
timestamp()方法会自动处理夏令时等时区规则,确保计算的Epoch秒数准确对应UTC时间的偏移。- 如果你用
strftime('%s')来计算,会忽略时区信息,直接将datetime视为本地时区时间,这也是你提到的已有问题未考虑时区的原因,所以务必使用带时区的datetime对象调用timestamp()方法。
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

