You need to enable JavaScript to run this app. Python如何解析'Apr 21, 2021, 7:43:51 AM GMT+5:30'并转换为timestamp?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 00:36:03