我有一个谷歌应用程序脚本,它从电子表格上的给定行提取时间,然后转录它。然而,时区在这个过程中变得完全混乱。
相关代码(功能位被删掉,因为我认为它们不相关(:
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是同一时区在两个不同时区的正确偏移。