如何在Python中将特定格式日期转为Unix时间戳并解决格式匹配错误
解决Python解析带PT时区的日期并转换为Unix时间戳的问题
你的问题出在Python标准库的datetime.strptime对时区缩写的支持上:%Z格式符只能识别系统本地时区或者少数标准时区缩写(比如UTC、GMT),像PT(太平洋时间)这种非标准缩写它是无法解析的,所以才会抛出ValueError。
下面给你几种可行的解决方案,按推荐程度排序:
方法1:使用python-dateutil自动解析(最省心)
python-dateutil的日期解析器能自动识别大部分时区缩写,包括PT,而且会自动处理夏令时/冬令时的偏移,不用手动判断。
步骤如下:
- 先安装库:
pip install python-dateutil
- 编写代码:
from dateutil import parser import calendar news_date_str = 'Mon, 15 Jun 2020 22:11:06 PT' # 自动解析带时区的日期 parsed_date = parser.parse(news_date_str) # 转换为UTC Unix时间戳 unix_timestamp = calendar.timegm(parsed_date.utctimetuple()) print(unix_timestamp) # 输出:1592277066
方法2:使用Python 3.9+标准库zoneinfo(无需第三方库)
如果你用的是Python 3.9及以上版本,可以用标准库的zoneinfo来处理,它支持完整的时区数据库,能自动处理夏令时:
from datetime import datetime from zoneinfo import ZoneInfo import calendar news_date_str = 'Mon, 15 Jun 2020 22:11:06 PT' # 先去掉末尾的PT,解析为不带时区的datetime naive_date = datetime.strptime(news_date_str[:-3], '%a, %d %b %Y %H:%M:%S') # 为日期添加太平洋时区(自动识别夏令时) pacific_tz = ZoneInfo('America/Los_Angeles') tz_aware_date = naive_date.replace(tzinfo=pacific_tz) # 转换为UTC Unix时间戳 unix_timestamp = calendar.timegm(tz_aware_date.utctimetuple()) print(unix_timestamp) # 输出:1592277066
方法3:手动替换时区缩写为UTC偏移(适合简单场景)
如果你的日期范围固定(比如都是夏令时或者都是冬令时),可以手动把PT替换成对应的UTC偏移字符串,再用%z格式符解析:
比如2020年6月属于太平洋夏令时(PDT),对应的UTC偏移是-0700:
from datetime import datetime import calendar news_date_str = 'Mon, 15 Jun 2020 22:11:06 PT' # 替换PT为夏令时偏移 formatted_date_str = news_date_str.replace(' PT', ' -0700') # 解析带偏移的日期 parsed_date = datetime.strptime(formatted_date_str, '%a, %d %b %Y %H:%M:%S %z') # 转换为UTC Unix时间戳 unix_timestamp = calendar.timegm(parsed_date.utctimetuple()) print(unix_timestamp) # 输出:1592277066
⚠️ 注意:这种方法需要手动判断日期是否处于夏令时,如果你的数据跨冬夏令时,很容易出错,不推荐大范围使用。
内容的提问来源于stack exchange,提问作者Mehul Dhariyaparmar
相关产品推荐
相关产品推荐

