Google日历活动列表中包含timeMin的日历时区

时间:2018-06-14 09:52:49

标签: timezone google-calendar-api

要求

我可以在此引用后检索谷歌日历活动列表:https://developers.google.com/calendar/v3/reference/events/list

如何根据日历的时区获取2017-03-30T14:30:002017-03-30T15:30:00 之间所有活动的列表?

我的调查

有可选参数timeMintimeMax。问题是它们应该具有以下格式之一(RFC3339时间戳):

  1. 2017-03-30T14:30:00Z,此处Z代表Zulu = UTC timeZone
  2. 2017-03-30T14:30:00+03,此处+03代表与UTC
  3. 相比的timeZone转换

    在这两种情况下,我都必须获取日历的时区(如何以偏移方式获取格式,例如-04+00+03?)然后执行一些额外的计算/操作。

    显然在我的情况下,我更愿意传递值而不提及timeZone并让API使用日历的时区。

    还有另一个可选参数timeZone,但这是将在响应中使用的timeZone,而不是在过滤器中。默认为日历的时区,这对我有好处。

3 个答案:

答案 0 :(得分:0)

您不必使用'q'属性。相反,请使用timeMintimeMax,其中timeMin是较早的日期。 try-it格式如下所示:

enter image description here

答案 1 :(得分:0)

最后,我找到了在日期时间应用GC(Google日历)TZ的方法:

from dateutil import tz
from datetime import datetime
tzinfo = tz.gettz(default_calendar['timeZone'])

# Option1: create date without TZ and then apply GC TZ using astimezone:
dt = datetime(2018,7,3,14,30,0)
dt_in_gc_tz = dt.astimezone(tzinfo) # 2018-07-03 14:30:00+03:00

# Option2: just create dateTime with GC TZ:
dt_in_gc_tz = datetime(2018, 7,3,14,30,0, tzinfo=tzinfo) # 2018-07-03 14:30:00+03:00

# Convert to RFC3339 timestamp string:
dt_in_gc_tz.isoformat() # '2018-07-03T14:30:00+03:00'

答案 2 :(得分:0)

        const moment = require('moment-timezone');

        const timeMin = moment(start_time).toISOString();
        const timeMax = moment(end_time).toISOString();

        oauth2Client.setCredentials({ refresh_token });

        const token = await oauth2Client.getAccessToken();
        const response = await axios.get(
            `https://www.googleapis.com/calendar/v3/calendars/${email}/events?key=${config.get('service:google:api_key')}&timeMin=${timeMin}&timeMax=${timeMax}`, {
            headers: {
                'Authorization': `Bearer ${token.res.data.access_token}`
            }
        });