Google の createEventSeries の例(以下を参照) では、Date 値は末尾に「EST」を付けて指定されています。ただし、定期的なイベントの日付を指定したい(この回答の種類の時間のタイプ #4 を参照)、たとえば、「DST が変更された場合でも、毎週月曜日の午後 9 時」などです。定期的なイベントの最初の月曜日を特定できるとします。問題は、その日の午後 9 時に DST が適用されているかどうかを考慮するように指定するにはどうすればよいかということです。
たとえば、「2010 年 7 月 21 日 09:00:00アメリカ/モントリオール」の例の日付を使用して、タイム ゾーン名 (Olson ID) を使用して日付を指定することは直感的です。Google Apps Script で試してみると、結果の Date は 1969 年に偽の値になります。
new Date()
日付が実際に「EST」または「EDT」であるかどうかをアプリオリに知っているのではなく、指定した Olson ID、たとえば「アメリカ/モントリオール」を取得するように、Google Apps Script でを指定するにはどうすればよいですか?
// 以下のコードは、1 日おきに繰り返されるユーザーのデフォルトのカレンダーにイベントを追加します var cal = CalendarApp.getDefaultCalendar(); cal.createEvent("Busy", new Date("2010 年 7 月 21 日 08:00:00 EST"), new Date("2010 年 7 月 21 日 09:00:00 EST"), CalendarApp.newRecurrence().addDailyRule( .interval(2), {location:'仮眠室'});`
ps GAS の JavaScript new Date() がスクリプトのタイムゾーンを継承するという情報に依存する回避策/ハックを見つけました(4 番目の箇条書きを参照) 。スクリプトのタイムゾーンを、定期的なイベントを作成したいタイムゾーンに設定すると、うまくいくように見えます。しかし、壊れやすいように見えるので、この詳細に依存したくありません.
編集
以下は、回避策を使用した小さなテストの出力で、その動作を示しています。GMT-0500 (EST)がGMT-0400 (EDT)にどのように変化するかに注意してください。
関数 shortTest() { // DST は 2012 年 3 月 10 日に「アメリカ/モントリオール」で始まります (オルソン ID) // このスクリプトのプロジェクト プロパティは、タイム ゾーン (今日、2012 年 12 月 18 日) を示しています // "(GMT-05:00) 東部時間 - モントリオール" Logger.log("Date = " + (new Date("2013 年 3 月 9 日 21:00:00"))); Logger.log("Date = " + (new Date("2013 年 3 月 10 日 21:00:00"))); Logger.log("Date = " + (new Date("2013 年 3 月 11 日 21:00:00"))); }
ロガー出力
日付 = 2013 年 3 月 9 日土曜日 21:00:00 GMT-0500 (EST) 日付 = 2013 年 3 月 10 日日曜日 21:00:00 GMT-0400 (EDT) 日付 = 2013 年 3 月 11 日月曜日 21:00:00 GMT-0400 (EDT)