【问题标题】:Google Apps Script: Calendar .getEvents imports events in wrong timezoneGoogle Apps 脚本:Calendar .getEvents 导入错误时区的事件
【发布时间】:2015-04-26 12:04:29
【问题描述】:

Calendar.getEvents 仅适用于 PDT 时区,无法检索我的 GMT+02.00(欧洲/华沙、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]);
    }
}

返回:

[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]

【问题讨论】:

    标签: javascript google-apps-script timezone


    【解决方案1】:

    您不能依赖执行记录中显示的值(有时在记录器中也是如此,至少在过去……现在不确定),不要忘记此代码是在 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 方法允许正确显示。

    【讨论】:

    • Serge 我认为这可以在脚本属性中控制:时区设置
    • 谢谢伙计。一切都好。这是我的错,我在另一边寻找错误;)我对一个数据对象有问题,这使我的思维混乱。再次感谢:)
    • @Zig:你是说 logger 中的 tz 吗?这可能解释了为什么我以前有问题(几年前可能?)而现在没有了……但我不确定。谢谢你的信息。我猜执行记录总是在 PDT 中,对吧?
    • 不确定。一堆格式化的东西取决于那个设置。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多