Google カレンダー API で時間が9時間ずれて表示されたり、取得範囲が指定したよりも9時間ずれたりしていて散々はまった。
タイムゾーン指定の方法はいくつかあって、Google Calendar API v3では
- Event:listのtimeZoneプロパティ
- 取得対象のカレンダーの設定(ユーザ側設定)。
- 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
となって、時差の分だけ現在時刻が動いてしまって全然だめでした。
面倒くさがらず決められた書式で指定しましょう。