Google Apps 脚本:Calendar .getEvents 以错误的时区导入事件
Google Apps Script: Calendar .getEvents imports events in wrong timezone
Calendar.getEvents 仅适用于 PDT 时区,无法检索我的 GMT+02.00(Europe/Warsaw、CEST)时区的事件。
我是 JS 和 GAS 编程的新手,但它看起来像一些问题,也许我的问题有一些解决方法?
Utilities.formatDate 也将 new Date() 视为 PDT 时区。
我所有的应用程序都在同一时区运行。
请原谅我的语言,这不是我的母语。
代码示例:
function date () {
var dateS = new Date(2015,3,20);
var dateE = new Date();
Logger.log("Start :", dateS);
Logger.log("Stop :", dateE);
var timeZone = Session.getScriptTimeZone();
var spr = CalendarApp.setTimeZone(timeZone);
var rps = SpreadsheetApp.getActive()
.setSpreadsheetTimeZone(timeZone);
var cal = CalendarApp.getCalendarsByName("Norske hellig- og merkedager");
var week = Utilities.formatDate(dateS, timeZone, "ww");
Logger.log("Week nr:", week);
var events = cal[0].getEvents(dateS, dateE);
for (i=1; i < events.length; i++)
{
Logger.log(events[i]);
}
}
return:
[15-04-26 13:49:48:630 CEST] Logger.log([Start :, [Mon Apr 20 00:00:00 GMT+02:00 2015]]) [0 s]
[15-04-26 13:49:48:630 CEST] Logger.log([Stop :, [Sun Apr 26 13:49:48 GMT+02:00 2015]]) [0 s]
[15-04-26 13:49:48:630 CEST] Session.getScriptTimeZone() [0 s]
[15-04-26 13:49:49:166 CEST] CalendarApp.setTimeZone([Europe/Warsaw]) [0,535 s]
[15-04-26 13:49:49:166 CEST] SpreadsheetApp.getActive() [0 s]
[15-04-26 13:49:49:189 CEST] Spreadsheet.setSpreadsheetTimeZone([Europe/Warsaw]) [0,022 s]
[15-04-26 13:49:49:415 CEST] CalendarApp.getCalendarsByName([Norske hellig- og merkedager]) [0,225 s]
[15-04-26 13:49:49:416 CEST] Utilities.formatDate([Sun Apr 19 15:00:00 PDT 2015, Europe/Warsaw, ww]) [0 s]
[15-04-26 13:49:49:416 CEST] Logger.log([Week nr:, [17]]) [0 s]
[15-04-26 13:49:49:647 CEST] Calendar.getEvents([Sun Apr 19 15:00:00 PDT 2015, Sun Apr 26 04:49:48 PDT 2015]) [0,23 s]
你不能依赖执行记录中显示的值(有时在 Logger 中也是如此,至少在过去......现在不确定),不要忘记这段代码是在 Google 的服务器位于加利福尼亚州,并使用太平洋时区作为标准;-)
但是如果你正确使用 Utilities.formatDate
你会得到正确的值。
尝试使用您的代码改编后查看 Logger 结果:
function date () {
var dateS = new Date(2015,3,20);
var dateE = new Date();
Logger.log("Start :", dateS);
Logger.log("Stop :", dateE);
var timeZone = Session.getScriptTimeZone();
Logger.log(timeZone);
var spr = CalendarApp.setTimeZone(timeZone);
var rps = SpreadsheetApp.getActive()
.setSpreadsheetTimeZone(timeZone);
var cal = CalendarApp.getCalendarsByName("test_agenda")[0];// I changed to a calendar I own for my test
cal.createEventFromDescription('test event, today 9AM');// create a dummy event for test purpose
var week = Utilities.formatDate(dateS, timeZone, "ww");
Logger.log("Week nr:", week);
var events = cal.getEvents(dateS, dateE);
for (i=1; i < events.length; i++)
{
Logger.log(Utilities.formatDate(events[i].getStartTime(),timeZone,"yyyy/MM/dd @ HH:mm"));
}
}
日期对象是正确的,但它在执行记录中显示不同,你可以忽略这个差异。
Utilities.formatDate
方法允许正确显示。
Calendar.getEvents 仅适用于 PDT 时区,无法检索我的 GMT+02.00(Europe/Warsaw、CEST)时区的事件。
我是 JS 和 GAS 编程的新手,但它看起来像一些问题,也许我的问题有一些解决方法?
Utilities.formatDate 也将 new Date() 视为 PDT 时区。
我所有的应用程序都在同一时区运行。
请原谅我的语言,这不是我的母语。
代码示例:
function date () {
var dateS = new Date(2015,3,20);
var dateE = new Date();
Logger.log("Start :", dateS);
Logger.log("Stop :", dateE);
var timeZone = Session.getScriptTimeZone();
var spr = CalendarApp.setTimeZone(timeZone);
var rps = SpreadsheetApp.getActive()
.setSpreadsheetTimeZone(timeZone);
var cal = CalendarApp.getCalendarsByName("Norske hellig- og merkedager");
var week = Utilities.formatDate(dateS, timeZone, "ww");
Logger.log("Week nr:", week);
var events = cal[0].getEvents(dateS, dateE);
for (i=1; i < events.length; i++)
{
Logger.log(events[i]);
}
}
return:
[15-04-26 13:49:48:630 CEST] Logger.log([Start :, [Mon Apr 20 00:00:00 GMT+02:00 2015]]) [0 s]
[15-04-26 13:49:48:630 CEST] Logger.log([Stop :, [Sun Apr 26 13:49:48 GMT+02:00 2015]]) [0 s]
[15-04-26 13:49:48:630 CEST] Session.getScriptTimeZone() [0 s]
[15-04-26 13:49:49:166 CEST] CalendarApp.setTimeZone([Europe/Warsaw]) [0,535 s]
[15-04-26 13:49:49:166 CEST] SpreadsheetApp.getActive() [0 s]
[15-04-26 13:49:49:189 CEST] Spreadsheet.setSpreadsheetTimeZone([Europe/Warsaw]) [0,022 s]
[15-04-26 13:49:49:415 CEST] CalendarApp.getCalendarsByName([Norske hellig- og merkedager]) [0,225 s]
[15-04-26 13:49:49:416 CEST] Utilities.formatDate([Sun Apr 19 15:00:00 PDT 2015, Europe/Warsaw, ww]) [0 s]
[15-04-26 13:49:49:416 CEST] Logger.log([Week nr:, [17]]) [0 s]
[15-04-26 13:49:49:647 CEST] Calendar.getEvents([Sun Apr 19 15:00:00 PDT 2015, Sun Apr 26 04:49:48 PDT 2015]) [0,23 s]
你不能依赖执行记录中显示的值(有时在 Logger 中也是如此,至少在过去......现在不确定),不要忘记这段代码是在 Google 的服务器位于加利福尼亚州,并使用太平洋时区作为标准;-)
但是如果你正确使用 Utilities.formatDate
你会得到正确的值。
尝试使用您的代码改编后查看 Logger 结果:
function date () {
var dateS = new Date(2015,3,20);
var dateE = new Date();
Logger.log("Start :", dateS);
Logger.log("Stop :", dateE);
var timeZone = Session.getScriptTimeZone();
Logger.log(timeZone);
var spr = CalendarApp.setTimeZone(timeZone);
var rps = SpreadsheetApp.getActive()
.setSpreadsheetTimeZone(timeZone);
var cal = CalendarApp.getCalendarsByName("test_agenda")[0];// I changed to a calendar I own for my test
cal.createEventFromDescription('test event, today 9AM');// create a dummy event for test purpose
var week = Utilities.formatDate(dateS, timeZone, "ww");
Logger.log("Week nr:", week);
var events = cal.getEvents(dateS, dateE);
for (i=1; i < events.length; i++)
{
Logger.log(Utilities.formatDate(events[i].getStartTime(),timeZone,"yyyy/MM/dd @ HH:mm"));
}
}
日期对象是正确的,但它在执行记录中显示不同,你可以忽略这个差异。
Utilities.formatDate
方法允许正确显示。