簡體   English   中英

Google Apps腳本和Google日歷的DST問題

[英]DST problems with Google Apps Script and Google calendar

我正在創建一個學校課程來管理班級,時區和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日之前,此方法一直有效。

如何管理DST?

編輯:

將腳本設置為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一樣

好吧,在深入研究之后,看起來就像是一個解決方案。

除非在傳遞給腳本的Date對象中指定了腳本,否則Google日歷會查看腳本的時區。 在您的情況下,它不是( toLocaleString不會修改原始對象,如果這樣做,則將字符串傳遞到createEventSeries會出錯)。 無論如何,您的腳本的時區似乎是貝爾格萊德,並且有夏令時,時間更改等。

最后,可能的解決方案。 我不知道日歷服務是否允許不考慮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基於此答案

使用這個,我得到了(最初時間是早上7點):

日歷截圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM