0

使用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?
一个可能的流程:

  1. 从日期生成 DateTimes,假设它已转换为 UTC
  2. 将其本地化到用户的本地 tz
  3. 获取日期,并使用它来生成实际的日期时间
  4. 存储在数据库中,返回 UTC

对处于风口浪尖上的用户日历有何影响?(比如新西兰或阿拉斯加)

谢谢!

4

0 回答 0