谷歌应用程序脚本中的时区不正确



我有一个谷歌应用程序脚本,它从电子表格上的给定行提取时间,然后转录它。然而,时区在这个过程中变得完全混乱。

相关代码(功能位被删掉,因为我认为它们不相关(:

var timezone = "GMT+" + new Date().getTimezoneOffset()/60;
function dysfunction(row) {
this.time = new Date (sheet.getRange(row,6).getValue());
this.time.setFullYear(2020);
this.timeString = Utilities.formatDate(this.time, timezone, "hh:mm a");
Logger.log(timezone);
Logger.log(this.time);
Logger.log(this.timeString);
}

堆栈驱动程序登录执行:

May 4, 2020, 9:43:52 PM Info    GMT+6
May 4, 2020, 9:43:52 PM Info    Wed Dec 30 14:00:00 GMT-07:00 2020
May 4, 2020, 9:43:52 PM Info    03:00 AM

我的正确时区实际上是GMT-07:00,但由于某种原因,脚本检测到我的时区为GMT+6。我在项目属性中设置了正确的时区,甚至在清单中宣布时区为"美国/埃德蒙顿"。

我下一步该去哪里弄清楚为什么这个东西对正确阅读时区不感兴趣?

我想提出以下修改。

发件人:

Utilities.formatDate(this.time, timezone, "hh:mm a")

收件人:

Utilities.formatDate(this.time, SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "hh:mm a")

参考文献:

  • getSpreadsheetTimeZone((

实际上,时区偏移可能会因季节而异:+0700或+0600是同一时区在两个不同时区的正确偏移。

最新更新