You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中转换带时区字符串为datetime及处理Google Calendar API时间?

嘿,我来一步步帮你解决这两个关于Python datetime的问题~

1. 如何在Python中将字符串转换为带时区的datetime对象?

这得看你的Python版本和字符串格式来选方案:

  • Python 3.9+ 且字符串是ISO 8601格式:直接用datetime.fromisoformat(),它原生支持带时区的格式(不管时区有没有冒号),示例代码:
    from datetime import datetime
    
    iso_str = "2024-05-20T14:30:00+01:00"
    dt_with_tz = datetime.fromisoformat(iso_str)
    
  • 任意版本且字符串格式固定(时区无冒号):用strptime()配合%z指令,%z专门匹配±HHMM格式的时区偏移,示例:
    from datetime import datetime
    
    tz_str = "2024-05-20 14:30:00 +0100"
    dt_with_tz = datetime.strptime(tz_str, "%Y-%m-%d %H:%M:%S %z")
    
2. 处理Google Calendar API返回的字符串及%z的时区问题

Google Calendar API返回的时间字符串通常是带冒号的时区格式,比如2024-05-20T14:30:00+01:00,这时候直接用strptime("%Y-%m-%dT%H:%M:%S%z")会报错,下面来拆解问题和解决方案:

为什么%z不能匹配带冒号的+01:00?

根据Python官方文档,%z的定义是匹配±HHMM格式的时区偏移(不带冒号的4位数字),这是遵循POSIX标准的规范,带冒号的+01:00不符合这个格式规则,所以匹配失败。

用datetime模块解决的方法

有两种原生可行方案:

  1. 手动去掉时区里的冒号:先对字符串做简单处理,把+01:00改成+0100,再用strptime解析:
    from datetime import datetime
    
    gcal_time = "2024-05-20T14:30:00+01:00"
    # 切割字符串,移除时区部分的冒号
    processed_time = gcal_time[:-3] + gcal_time[-2:]
    dt = datetime.strptime(processed_time, "%Y-%m-%dT%H:%M:%S%z")
    
  2. Python 3.9+ 直接用fromisoformat:这个方法原生支持带冒号的时区格式,无需额外处理字符串:
    from datetime import datetime
    
    gcal_time = "2024-05-20T14:30:00+01:00"
    dt = datetime.fromisoformat(gcal_time)
    

如果你的Python版本低于3.9,第一种手动处理的方法是最稳妥的原生解决方案;版本够新的话,直接用fromisoformat省心不少。

内容的提问来源于stack exchange,提问作者wokadakow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:27:23