iCalendar 开始时差

iCalendar start time difference

这是怎么回事

我正在用 NodeJS 开发一个 Web 应用程序来显示有关与我大学的中央服务器同步的用户议程的信息。为此,我编写了一个脚本,每小时下载一个 ICS 文件来更新我的本地议程(存储在 SQLite 数据库中)。

好像是什么问题

有人向我报告他们议程中的某些事件与大学版本不正确同步,开始时间不同。这就是问题所在。我在大学网页。但是,当我以 iCal 格式从服务器检索它们时,它们是这样表示的(我删除了与我的问题无关的属性):

DTSTART:20211108T070000Z <-- starts at 7am UTC
DTEND:20211108T083000Z
SUMMARY:Event A
LOCATION:A room
DESCRIPTION:A description
DTSTART:20211025T060000Z <-- starts at 6am UTC
DTEND:20211025T073000Z
SUMMARY:Event B
LOCATION:A room
DESCRIPTION:A description

我已经尝试过的

我已经尝试使用开源应用程序(名为 OpenWebCalendar)将 iCal 事件从 URL 显示到日历,它 显示就像大学议程. *事件 A 和 B 都在世界标准时间早上 6 点开始。

遗憾的是,我无法找到该应用如何查看其 source code

So this problem doesn't come from the University ical file I retrieve.

我尝试查看 iCalendar specification document 但无济于事。我也找不到任何证据表明这与时区问题有关 ,因为在 ical 文件中设置的所有日期时间值都是 UTC 格式

So, no problem with the Timezones and I can't find a property or specification that would explain this difference and how to fix it.

我还在 NodeJS 中编写了一个测试脚本,以便使用 node-ical 检索有关 iCal 的信息无济于事。检索事件时显示的开始时间与文件中的相同,这根本没有帮助。

如果您有兴趣,这是经过编辑的代码:

const ical = require('node-ical')

let body = `
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:-//SomeAppName/version 1.0
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTAMP:20211010T100331Z
DTSTART:20211108T070000Z
DTEND:20211108T083000Z
SUMMARY:Event A
LOCATION:A room
DESCRIPTION:A description
UID:UniqueCodeA 
CREATED:19700101T000000Z
LAST-MODIFIED:20211010T100331Z
SEQUENCE:2128343411
END:VEVENT
BEGIN:VEVENT
DTSTAMP:20211010T100331Z
DTSTART:20211025T060000Z
DTEND:20211025T073000Z
SUMMARY:Event B
DESCRIPTION:A description
UID:UniqueCodeB
CREATED:19700101T000000Z
LAST-MODIFIED:20211010T100331Z
SEQUENCE:2128343411
END:VEVENT
END:VCALENDAR
`

ical.async.parseICS(body, function(err, events){
    console.log(events["UniqueCodeA"])
    console.log(events["UniqueCodeB"])
})

那么,我的问题是

是否有关于 iCal 开始时间为何不同以及如何像 OpenWebCalendar 那样更正它们的任何 iCal 规范、属性或任何解释?

欢迎享受夏令时变化和时区带来的乐趣。某处有人像大多数人一样查看时区设置的日期,这是预期的。那里有 2 个日期,看起来一个是夏令时变化的一侧,另一个在另一侧。

与 UTC 不同,一些时区有夏令时,当然时区不会同时更改 from/to 夏令时,因此多个时差的很多可能性在事件之间似乎不一致。

以伦敦为例,2021年11月8日,伦敦时间与UTC时间相同:

https://www.timeanddate.com/worldclock/meetingtime.html?day=8&month=11&year=2021&p1=195&p2=136&iv=0

然而,在世界标准时间 2021 年 10 月 25 日早上 6 点,伦敦是早上 7 点。

https://www.timeanddate.com/worldclock/meetingtime.html?iso=20211025&p2=195&p3=136

始终检查每个设备和日历应用程序上设置的时区,并注意夏令时的变化。