[英]How to compensate for daylight savings time in the future for ICS file calendar downloads
我有一份各種項目的截止日期清單。 每 3 個月一次,我將接下來 3 個月的截止日期下載為 ICS 文件並將它們添加到我的日歷中。 因為我每 3 個月只下載一次,所以我遇到了關於夏令時 (DST) 的問題。 這是問題的一個例子:
我無法確定解決此問題的最佳方法是:
AT TIME ZONE
均無濟於事。 我在 JavaScript 中遇到了同樣的問題:它將時間設置在指定的時區,而不考慮日期是否會受到未來 DST 的影響。更新以發布以包含更多信息
截止日期信息( PROJECT_NAME
和DUE_DATE
)是從 PostgreSQL 數據庫中提取的。 到期日期存儲為 DATE 值,如下所示: 05-MAR-22
。
為了增加時間,我采取了兩種方法:
select ('06-JUN-2022'::date + time '9:00') at time zone 'America/New_York'
deadline.DUE_DATE = deadline.DUE_DATE.split("T"[0] += " 09:00:00";
但是這兩種方法都沒有幫助我解決時區問題。
JavaScript 微服務設置以下字段:
BEGIN:VEVENT
UID:[ UID ]
SUMMARY:[ PROJECT_NAME ]
DTSTAMP:[ DTSTAMP ]
DTSTART:[ DTSTART ]
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:[ TRIGGER ]
END:VALARM
DURATION:PT
END:VEVENT
這似乎缺少配置時區的一些重要細節。
您可以選擇利用 ICS 文件的TZID 參數和VTIMEZONE 組件在 ICS 文件中嵌入時區信息。 VTIMEZONE 組件需要將有關 DST 規則的信息添加到文件中,並且每個唯一的 TZID 必須有一個對應的 VTIMEZONE 組件。 您可以使用為每個時區生成VTIMEZONE定義的 tzurl.org。 有關如何執行此操作的更多信息,您可以參考以下相關問題:
我對 Microsoft Outlook 和 Apple 日歷的具體實現細節缺乏一些了解,但我很確定他們會考慮 ICS 文件中的此類相關信息。
查看您如何使用 Javascript 生成 ICS 文件。 聽起來時區設置為夏令時前的時區,這會在夏令時轉換后查看事件時出現問題。 根據ics 規范:
無論 iCalendar 對象中是否存在“VTIMEZONE”日歷組件,在沒有“TZID”屬性參數的 DATE-TIME 或 TIME 值中使用本地時間將被解釋為浮動時間。
這也可能指向時區設置錯誤的可能性,因為如果沒有定義“TZID”/“VTIMEZONE”組件,則事件應該被視為“浮動”,或者“相同的小時、分鍾和秒值,無論當前正在觀察哪個時區。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.