Google Apps脚本和Google日历的DST问题

问题描述 投票:1回答:1

我正在创建一个用于管理课程的学校项目,我遇到时区问题,DST这里是我的代码:

javascript
dejt = new Date(thisYear, 8, day, beginTime, endTime, 0, 0);
dejt.toLocaleString("en-US", {timezone: "Europe/Belgrade"});

我通过一些函数直到:

javascript
function makeCalendar(name, begin, end, calendar) {
    var eventSeries = CalendarApp.getCalendarById(calendar).createEventSeries(
        name,
        begin,
        end,
        CalendarApp.newRecurrence()
            .addWeeklyRule().interval(2).until(endDate)
    );
}

这一点很有效,直到它在10月29日到达之后,一切都提前一小时移动。

我如何管理夏令时?

编辑:

将脚本设置为GMT(没有夏令时)之后,事情变得更加一致,并且每个日期都输入+00:00

Logs:
[19-02-12 11:30:15:809 CET] Sun Feb 17 00:00:00 GMT+00:00 2019
[19-02-12 11:30:15:810 CET] Mon Feb 18 00:00:00 GMT+00:00 2019
[19-02-12 11:30:24:051 CET] Mon Sep 03 14:00:00 GMT+00:00 2018
[19-02-12 11:30:24:503 CET] Mon Sep 03 14:50:00 GMT+00:00 2018

现在唯一的问题是,重复发生的事件只会改变夏令时的时间(不是新的错误,之前就是这样)。

编辑:

我发现的新东西:如果您手动编辑事件,则有时区框;我的脚本使其成为UTC,但我可以手动编辑或删除它。这里的问题是我需要手动完成。

我还在Google文档中找到了.setTimeZone(string):herehere

现在的问题是我不能让它工作,无论我尝试过什么事情会和UTC一样

javascript datetime google-apps-script google-calendar-api dst
1个回答
0
投票

好吧,经过一番深入研究,看起来就像解决方案。

除非在您传入的Date对象中指定,否则Google日历会查看脚本的时区。在你的情况下它不是(toLocaleString不会修改原始对象,如果它会,你会遇到错误,将字符串传递给createEventSeries)。无论如何,你的剧本的时区似乎是贝尔格莱德,还有DST,时间变化等。

最后,可能的解决方案我不知道Calendar服务是否允许不考虑DST,因此试图解决问题:

// function to convert date to UTC so that it retains original hours value
function convertDateToUTC(date, timezoneOffset) { 
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours() + timezoneOffset, date.getUTCMinutes(), date.getUTCSeconds()); 
}
// 1 is the timezone offset from GMT
makeCalendar('test event', convertDateToUTC(beginDate, 1), convertDateToUTC(endDate, 1), calendar.getId());

函数convertDateToUTC基于this answer

使用这个,我得到了(开始时间是原来的早上7点):

calendar screenshot

© www.soinside.com 2019 - 2024. All rights reserved.