You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中Google Calendar API日期输出格式修改求助

解决Google Calendar API日期格式修改问题

我来帮你搞定这个日期格式的调整!Google Calendar API返回的日期数据分两种情况:带具体时间的dateTime(通常带时区)和全天事件的date,咱们针对性处理就能得到你想要的格式。

首先,先回忆下你获取事件的核心代码,大概是这样的:

# 假设已经创建好service服务对象
events_result = service.events().list(
    calendarId='primary',
    timeMin='2024-05-01T00:00:00Z',
    maxResults=10,
    singleEvents=True,
    orderBy='startTime'
).execute()
events = events_result.get('items', [])

之前你尝试dateutilstrftime没成功,大概率是没正确处理API返回的日期类型——要么是带时区的字符串,要么是已经转成的datetime对象,咱们分情况处理:

方法1:处理RFC3339格式字符串(最常见)

如果API返回的start字段是类似2024-05-20T14:30:00+08:00的字符串,先通过dateutil.parser解析成datetime对象,再用strftime格式化:

from dateutil import parser

for event in events:
    # 获取事件的起始日期/时间
    start_raw = event['start'].get('dateTime', event['start'].get('date'))
    # 解析为datetime对象
    start_dt = parser.parse(start_raw)
    
    # 格式1:yyyy-mm-dd
    formatted_date_ymd = start_dt.strftime('%Y-%m-%d')
    # 格式2:Apr 15, 2018 风格
    formatted_date_month = start_dt.strftime('%b %d, %Y')
    
    # 输出你想要的格式,二选一即可
    print(f"{formatted_date_ymd} {event['summary']}")
    # print(f"{formatted_date_month} {event['summary']}")

方法2:直接处理已转换的datetime对象

如果你的googleapiclient版本会自动把dateTime字段转换成带时区的datetime对象,那直接格式化就行,不用额外解析:

for event in events:
    start_dt = event['start'].get('dateTime', event['start'].get('date'))
    
    # 同样生成两种格式
    formatted_date_ymd = start_dt.strftime('%Y-%m-%d')
    formatted_date_month = start_dt.strftime('%b %d, %Y')
    
    print(f"{formatted_date_ymd} {event['summary']}")

注意事项

  • 如果还没安装python-dateutil,先执行pip install python-dateutil
  • 对于全天事件,date字段本身就是yyyy-mm-dd的字符串,直接用也可以,解析成datetime再格式化结果一致

这样调整后,就能完美输出你想要的日期格式啦!

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

火山引擎 最新活动