【问题标题】:Google calendar api returns different date formats谷歌日历 api 返回不同的日期格式
【发布时间】:2021-12-22 20:21:35
【问题描述】:

我有一个 python 脚本,它将我的一些约会同步到两个不同的谷歌账户,两个账户都有一个谷歌日历,显然设置相同(时区设置也相同),在调用下载时日历上的约会列表但是,根据我要查询的日历,调用返回具有不同日期格式的约会。

第一个日历返回的响应示例:

第二个日历返回的响应示例:

使用的库是google开发的(使用的Python版本是3.6)

脚本(这两种情况都在同一台机器上运行)如下:

params = {
    'calendarId':   self._calendar.id,
    'timeMin':      from_datetime,
    'timeMax':      to_datetime,
    'maxResults':   MAX_APP_DOWNLOADS,
    'singleEvents': True,
    'orderBy':      'startTime',
    'showDeleted':  'true'
}
events_result = self._service.events().list(**params).execute()
events = events_result.get('items', [])

我想是日历配置有问题,但我在设置中没有找到任何相关设置。

【问题讨论】:

  • 可能相关:军事时间后缀(ZULU)here

标签: python google-calendar-api


【解决方案1】:

返回的两次都在ISO 8601 format

更新:来自 Google API Docs,它是 RFC3339。它们大多相似,但 RFC3339 更严格。

您可以使用datetime.datetime.fromisoformatdateutil.parser.isoparse

>>> from datetime import datetime

>>> from dateutil.parser import isoparse

>>> datetime.fromisoformat('2011-11-04T00:05:23+04:00')
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

>>> isoparse('2011-11-04T00:05:23Z')
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=0)))

看起来datetime.datetime.fromisoformat 不支持以“Z”字符结尾的读取,因此您应该使用dateutil 格式。

【讨论】:

  • 非常感谢您的帮助,我现在已经设法正确转换了两种不同类型的日期格式,但是我无法理解这两种 API 的响应如何不同日历,因为这两个帐户和两个日历都设置相同。我知道它们都是 ISO 8601 格式,但我不明白为什么要使用不同的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2016-03-22
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多