在Google 的 createEventSeries 示例(如下所示)中,Date 值以“EST”结尾指定。但是,我想指定重复事件的日期(请参阅此答案中的类型#4),例如,“每周一晚上 9 点,即使 DST 更改。” 假设我可以确定哪一天是我经常性事件的第一个星期一。问题是我如何指定当天晚上 9 点应该考虑 DST 是否生效?
使用时区名称 (Olson ID) 来指定日期会很直观,例如,使用示例中的日期“2010 年 7 月 21 日 09:00:00 America/Montreal ”。如果我在 Google Apps 脚本中尝试,生成的日期在 1969 年有一个虚假值。
我如何new Date()
在 Google Apps 脚本中指定 a 以便它了解我指定的 Olson ID,例如“America/Montreal”,而不是让我先验地知道日期是否实际上是“EST”或“EDT”?
// 下面的代码将向用户的默认日历添加一个每隔一天重复一次的事件 var cal = CalendarApp.getDefaultCalendar(); cal.createEvent("忙碌", new Date("2010 年 7 月 21 日 08:00:00 EST"), new Date("2010 年 7 月 21 日 09:00:00 EST"), CalendarApp.newRecurrence().addDailyRule( ).interval(2), {location:'Nap room'});`
ps 我找到了一种解决方法/hack,它依赖于 GAS 中的 JavaScript new Date() 将继承脚本的时区的信息(参见第 4 个要点)。我可以将脚本的时区设置为我想要创建重复事件的时区,并且它似乎可以工作。但我不想依赖这个细节,因为它看起来很脆弱。
编辑
下面是一个小测试的输出,使用该变通方法向您展示它是如何工作的。请注意GMT-0500 (EST)如何更改为GMT-0400 (EDT)。
功能短测试(){ // DST 于 2012 年 3 月 10 日在“美国/蒙特利尔”(Olson ID)开始 // 此脚本的项目属性显示时区(今天,2012 年 12 月 18 日) // "(GMT-05:00) 东部时间 - 蒙特利尔" Logger.log("日期 = " + (new Date("2013 年 3 月 9 日 21:00:00"))); Logger.log("日期 = " + (new Date("2013 年 3 月 10 日 21:00:00"))); Logger.log("日期 = " + (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)