Python如何解析'Apr 21, 2021, 7:43:51 AM GMT+5:30'并转换为timestamp?
日期格式说明
你拿到的是谷歌表格导出的带时区偏移的GMT格式日期字符串,各部分对应格式规则如下:
- 月份缩写
Apr:对应格式符%b - 日期年份
21, 2021:对应格式符%d, %Y - 12小时制时间+上下午标识
7:43:51 AM:对应格式符%I:%M:%S %p - 时区信息
GMT+5:30:由时区缩写GMT和带冒号的时区偏移量组成,Python 3.7及以上版本可通过%Z%z组合直接匹配。
解析为timestamp的实现方案
现有代码只需要补充时区部分的匹配规则即可,根据Python版本可选两种实现:
方案1:Python 3.7+ 直接匹配
Python 3.7开始%z原生支持带冒号的时区偏移格式,直接修改格式串即可:
from datetime import datetime # 非英文locale环境需要先设置时间 locale 为英文,保证月份缩写识别正常 import locale locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') def to_timestamp(s): datetime_object = datetime.strptime(s, '%b %d, %Y, %I:%M:%S %p %Z%z') return datetime_object.timestamp()
输入你给出的样例字符串'Apr 21, 2021, 7:43:51 AM GMT+5:30',返回的时间戳为1618968831.0。
方案2:兼容Python 3.6及更低版本
低版本Python的%z不支持带冒号的偏移,需要先预处理字符串去掉偏移中的冒号:
from datetime import datetime import re import locale locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') def to_timestamp(s): # 正则替换去掉时区偏移中的冒号,将+5:30转为+0530 processed_s = re.sub(r'([+-]\d+):(\d+)', lambda match: f"{match.group(1).zfill(3)}{match.group(2)}", s) datetime_object = datetime.strptime(processed_s, '%b %d, %Y, %I:%M:%S %p %Z%z') return datetime_object.timestamp()
内容的提问来源于stack exchange,提问作者BAE
相关产品推荐
相关产品推荐

