Google Calendar API のタイムゾーン設定方法

Google カレンダー API で時間が9時間ずれて表示されたり、取得範囲が指定したよりも9時間ずれたりしていて散々はまった。

タイムゾーン指定の方法はいくつかあって、Google Calendar API v3では

  1. Event:listのtimeZoneプロパティ
  2. 取得対象のカレンダーの設定(ユーザ側設定)。
  3. Event:listのtimeMin, timeMax プロパティ

の3つの指定方法があるみたい。

表示される予定の時間がずれている場合は、最初の2つの設定を見なおしてみると改善する。

「Event:listのtimeZoneプロパティで設定する」のは省略可能で、省略した場合は
「取得対象のカレンダーの設定(ユーザ側設定)」を見るようになっている。

timeMin,timeMaxで指定した取得範囲がずれている場合は、たぶん最後の一つを忘れている。

timeMin, timeMaxはタイムゾーンを明示しないとGMT指定になり、結果として日本だと9時間ずれた範囲になる。
タイムゾーンの指定方法は timeMin=2013-12-31T23:59:59.000+09:00 のように時間指定の後に”.000+09:00″をつけるだけでいいようです。

日付文字列に直接タイムゾーンを指定しなくても、例えばJavaなら

DateTime timeMin = DateTime.parseDateTime("2013-12-31T23:59:59");
timeMin.setTzShift(9*60) // 分指定で9時間
System.println("min:" + timeMin);
calQuery.setMinimumStartTime(timeMin);

のように DateTime#setTzShift() で更新すればいいのではないかと思ったら

min: 2014-01-01T08:59:59.000+09:00

となって、時差の分だけ現在時刻が動いてしまって全然だめでした。

面倒くさがらず決められた書式で指定しましょう。