Google日历API问题 - 夏令时

时间:2018-03-19 11:16:58

标签: asp.net-web-api calendar timezone save dst

我使用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日历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做同样的事情时,它工作正常,所以在我看来,夏令时应该引起这个问题。

有人可以提供更多关于如何在不考虑夏令时影响的情况下添加活动的信息吗?

1 个答案:

答案 0 :(得分:1)

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

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

谷歌API正在做什么 - 可能 - 正在将无效偏移(2018-04-05T12:00:00+01:00)调整为有效的偏移(2018-04-05T13:00:00+02:00) - 顺便说一句,两者都对应于相同的UTC时刻,因此转换很好

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

如果您正在处理时区,则无法忽略DST效果,因为DST is part of the timezone definition