Google 日历 API 问题 - 夏令时

Google calendar API issue - daylight saving

我使用 Google 日历 API 创建了一个应用程序来评估事件,最后还向日历添加了一个事件。现在我们即将切换到夏令时 我遇到了问题:API 正在将时间转移一小时。 示例:

$event = new Google_Service_Calendar_Event(array(
   'summary' => 'title',
   'description' => 'description',
   'start' => array(
       'dateTime' => '2018-04-05T12:00:00+1:00',
       'timeZone' => 'Europe/Amsterdam',
   ),
   'end' => array(
       'dateTime' => '2018-04-05T15:00:00+1:00',
       'timeZone' => 'Europe/Amsterdam',
   )
));

$event = $cal->events->insert($room_calendar_id, $event);

当我执行此代码时,结果是一个从 13:00 到 16:00 小时运行的事件。当我通过 Google calendar API 试用功能使用这些参数时,它给出了相同的结果。但在后一种情况下,它会返回以下 JSON 响应:

"start": {
  "dateTime": "2018-04-20T13:00:00+02:00",
  "timeZone": "Europe/Amsterdam"
 },
"end": {
  "dateTime": "2018-04-20T16:00:00+02:00",
  "timeZone": "Europe/Amsterdam"
  }

太奇怪了,它显示的偏移量是 +02:00。 我希望 API 不会更改时间和偏移参数。

当我为 2018-03-20 做同样的事情时,它工作正常,所以我认为夏令时应该会导致这个问题。

谁能提供更多关于如何在不考虑夏令时影响的情况下添加事件的信息?

时区 - 例如 Europe/Amsterdam - 具有夏令时效果,您无法避免它们,因为 DST 是时区定义控制的一部分。

在夏令时期间,offset used in Amsterdam is changed from +01:00 to +02:00。所以这并不奇怪,这实际上是预期的行为。

google API 正在做的 - 可能 - 正在将无效偏移量 (2018-04-05T12:00:00+01:00) 调整为有效偏移量 (2018-04-05T13:00:00+02:00) - 顺便说一句,两者都对应相同的 UTC 时刻,因此转换没问题。

这不会发生在 3 月 20 日,因为 DST 尚未开始 - 在 2018 年,它从 3 月 25 日开始。

如果您要处理时区问题,则无法忽略夏令时的影响,因为 DST is part of the timezone definition.