Google 日历 API 时区夏令时和标准时间问题
Google Calendar API Timezone daylight and standard time issue
当我创建一个事件并为其指定一个近期日期时,一切正常。
但是当我创建一个几个月后的事件时,说它落在夏令时 DST 之外(而我目前处于夏令时),该事件是用一个不需要的1 小时偏移量。
下面的代码产生以下输出:
Starts 2020-12-20 9:00 Ends 2020-12-20 11:00
$event = array(
'summary' => $attributes['summary'],
'location' => $attributes['location'],
'description' => $attributes['description'],
'start' => array(
'dateTime' => 2020-12-20T10:10:00-04:00',
'timeZone' => 'America/Toronto',
),
'end' => array(
'dateTime' => 2020-12-20T10:12:00-04:00',
'timeZone' => 'America/Toronto',
),
'anyoneCanAddSelf'=>true,
'guestsCanInviteOthers'=>true,
);
问题
我应该如何更改我的代码以使其自动运行并且我不需要每年两次手动更改我的代码/偏移量?
问题是您过度指定了 dateTime
参数以包含 offset,但您还提供了 timeZone
参数。在这种情况下,timeZone
参数与 dateTime
中的偏移值冲突(America/Toronto 是该日期的偏移量 -05:00)。
鉴于两者之间的冲突 - 它选择使用 dateTime
中指定的偏移量。
documentation for the Event resource 指定,在 end.dateTime
属性中:
The time, as a combined date-time value (formatted according to RFC3339). A time zone offset is required unless a time zone is explicitly specified in timeZone.
(强调)
解决该问题的最简单方法是从您指定的 dateTime
中删除偏移值并依赖于 timeZone
设置。
当我创建一个事件并为其指定一个近期日期时,一切正常。
但是当我创建一个几个月后的事件时,说它落在夏令时 DST 之外(而我目前处于夏令时),该事件是用一个不需要的1 小时偏移量。
下面的代码产生以下输出:
Starts 2020-12-20 9:00 Ends 2020-12-20 11:00
$event = array(
'summary' => $attributes['summary'],
'location' => $attributes['location'],
'description' => $attributes['description'],
'start' => array(
'dateTime' => 2020-12-20T10:10:00-04:00',
'timeZone' => 'America/Toronto',
),
'end' => array(
'dateTime' => 2020-12-20T10:12:00-04:00',
'timeZone' => 'America/Toronto',
),
'anyoneCanAddSelf'=>true,
'guestsCanInviteOthers'=>true,
);
问题
我应该如何更改我的代码以使其自动运行并且我不需要每年两次手动更改我的代码/偏移量?
问题是您过度指定了 dateTime
参数以包含 offset,但您还提供了 timeZone
参数。在这种情况下,timeZone
参数与 dateTime
中的偏移值冲突(America/Toronto 是该日期的偏移量 -05:00)。
鉴于两者之间的冲突 - 它选择使用 dateTime
中指定的偏移量。
documentation for the Event resource 指定,在 end.dateTime
属性中:
The time, as a combined date-time value (formatted according to RFC3339). A time zone offset is required unless a time zone is explicitly specified in timeZone.
(强调)
解决该问题的最简单方法是从您指定的 dateTime
中删除偏移值并依赖于 timeZone
设置。