如何在Python中不受机器时区影响地将UTC DateTime转为UTC Timestamp?
解决方案
问题根源:datetime.datetime.strptime解析出的是无时区信息(naive)的datetime对象,调用timestamp()时,Python会默认将其当作本地机器时区的时间来转换,导致不同时区的机器返回不同结果。
最简解决方法:给解析后的datetime对象明确标记为UTC时区,再转换时间戳,代码如下:
import datetime date1 = "2022-05-17 04:35:38" # 解析字符串为naive datetime,标记为UTC时区 dt_utc = datetime.datetime.strptime(date1, '%Y-%m-%d %H:%M:%S').replace(tzinfo=datetime.timezone.utc) # 转换为UTC时间戳 date_utc = int(dt_utc.timestamp())
这段代码会稳定返回1652762138,不受运行机器的时区影响。
补充说明
replace(tzinfo=datetime.timezone.utc)是给naive datetime添加UTC时区信息的最简方式,无需额外安装第三方库- 如果你的Python版本低于3.2,
datetime.timezone不可用,可改用pytz.utc(需先执行pip install pytz),代码调整为:import datetime import pytz date1 = "2022-05-17 04:35:38" dt_utc = datetime.datetime.strptime(date1, '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.utc) date_utc = int(dt_utc.timestamp())
内容的提问来源于stack exchange,提问作者HabibS
相关产品推荐
相关产品推荐

