使用python 3.6,请求==2.22.0,Postgres DB
在我的应用程序中,我有用户的日历表示,人们可以通过从可用的空闲时间中进行选择来安排这些表示。
用户的日历具有为该用户存储的时区。
我正在从我从用户的日历中获得的事件中生成事件 - 这些事件被用作已被占用且无法预订的块。(冲突)
然后我将事件以简单的对象表示形式存储在我的数据库中,并带有开始和结束日期时间。(Postgres 以 UTC 格式存储 DateTimes)
我正在使用单个事件查询(如下所示)和一个日期范围内的多个事件查询事件 - 所有查询都运行良好。
我正在使用查询参数:timeZone=UTC用于所有呼叫和所有事件。
我想了解的内容:
如何为从 API 获取的全天事件构建开始/结束日期时间?
我想生成一个单日或多日对象事件,该事件将完全按照用户日历中的方式表示该事件。
我在我的 Google 日历中生成了一个全天事件(我的日历在 Pacific tz 中),以测试我需要什么。
我在生成任何其他(非全天)事件方面的问题为零,并且以 UTC 检索对我来说效果很好。
我目前正在查询这样的单个事件:
import requests
url = 'https://www.googleapis.com/calendar/v3/calendars/<calendar_id>/events/<event_id>?timeZone=UTC'
response = requests.get(url, headers=my_headers)
response.json() 输出:
{'kind': 'calendar#event',
'etag': <some_tag>,
'id': <some_id>,
'status': 'confirmed',
'htmlLink': 'https://www.google.com/calendar/event?eid=<some_eid>&ctz=UTC',
'created': '2019-11-20T21:30:19.000Z',
'updated': '2019-11-20T21:53:39.298Z',
'summary': 'TESTING ALL DAY',
'creator': {'email': <some_email>, 'self': True},
'organizer': {'email': <some_email>, 'self': True},
'start': {'date': '2019-11-21'}, <-- all-day events have date, not dateTime
'end': {'date': '2019-11-22'}, <-- all-day events have date, not dateTime
'iCalUID': <some_id>,
'sequence': 0,
'reminders': {'useDefault': False,
'overrides': [{'method': 'popup', 'minutes': 10}]}}
因为我在 UTC 中请求事件,我是否应该假设日期已转换为 UTC?
一个可能的流程:
- 从日期生成 DateTimes,假设它已转换为 UTC
- 将其本地化到用户的本地 tz
- 获取日期,并使用它来生成实际的日期时间
- 存储在数据库中,返回 UTC
对处于风口浪尖上的用户日历有何影响?(比如新西兰或阿拉斯加)
谢谢!