我正在创建一个用于管理课程的学校项目,我遇到时区问题,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):here和here
现在的问题是我不能让它工作,无论我尝试过什么事情会和UTC一样
好吧,经过一番深入研究,看起来就像解决方案。
除非在您传入的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点):