为定时触发器设置时区

The*_*Fox 6 timezone triggers google-apps-script

我编写了一个利用谷歌定时触发器的脚本.但是,我在让脚本在正确的时间触发时遇到问题.我住在悉尼(格林尼治标准时间+10)并且需要每天中午开火的脚本.

我已经进入并在电子表格设置,项目属性以及Google云端硬盘的全局设置中设置了时区,但尽管如此,脚本仍然无法在正确的时间触发.它关闭了大约6-5小时.更令人沮丧的是,当我进入触发器管理面板时,时区被列为太平洋时间(-8小时),而且每次我登录时这还不够,似乎很快就会改变到其他一些随机时间标准等(在触发器面板内).

我甚至尝试手动补偿时差,但这也没有奏效,理想情况下不是我想要下去的路径,因为它会影响脚本被触发的那一天(这将是美国东部时间星期一和星期二这里在悉尼)这对我正在运行的数据库查询有影响,这对日期敏感.

无论哪种方式,我现在画了一个空白,想不出任何进一步的解决方案.我该如何解决这个问题?

Rod*_*igo 5

手动添加触发器不会设置正确的时区,但通过代码添加它确实有效:

  1. 在文件 > 项目属性 > 时区中为脚本设置适当的时区。
  2. 以编程方式添加触发器
function addTrigger() {
  // main() will be called every day at 7am in your selected time zone
  var everyDay = ScriptApp.newTrigger("main")
      .timeBased()
      .everyDays(1)
      .atHour(7)
      .create();
}
Run Code Online (Sandbox Code Playgroud)

您应该在“当前项目的触发器”视图中看到正确的时区。


ems*_*ems 5

我也有这个问题。可能是因为我在旅行。设置电子表格的时区没有帮助。设置脚本的时区也没有帮助。

使用@Rodrigo 脚本的修改版本有什么帮助:

function addTrigger() {
  // main() will be called weekly on Monday at 16:00 in the specified time zone
  var everyWeek = ScriptApp.newTrigger("main")
      .timeBased()
      .everyWeeks(1)
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .inTimezone("America/Los_Angeles")
      .atHour(16)
      .create();
}
Run Code Online (Sandbox Code Playgroud)

您可以使用.inTimezone()- 请参阅此处的说明来指定时区。

运行此脚本后,您可以使用 GUI 编辑器编辑触发器。此外,现在时区对于我使用 GUI 添加的新触发器是正确的——不确定这是因为脚本还是因为我现在回家了。


小智 0

我以前也曾被时区差异困扰过,所以我花了一些时间思考这个问题,但有时确实让我头疼!

查看我的一个触发器:我的 Google 帐户和电子表格设置为伦敦时间 (GMT+0),并且我已将触发器设置为每天凌晨 4 点 GMT 触发,所以看看周三(1 月 8 日):根据电子表格上的修订历史记录最后一次触发器于周二(1 月 7 日)太平洋时间晚上 8 点(GMT-8)触发。这与它们按预期在格林尼治标准时间 8 日凌晨 4 点出发相联系(在我的例子中,找到了 8 日的日历事件,因为它们存储在 GMT/UTC 中)。

如果您将电子表格时间设置为悉尼 (GMT+10),则触发器也应该在您设置的当地时间触发。

因此,也许您只需要仔细检查一下,或者您可以创建一个测试 Google 帐户并从头开始设置所有内容,以防您在某个地方错过了时区设置。

感觉我给了你很多,但希望这对你有帮助。