如何测试 icalendar 夏令时是否有效?

How do I test if icalendar daylight saving works?

我有生成 icalendar 事件的代码,包括夏令时的时区定义。

CET/CEST 的时区定义如下:

BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:20160327T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:20161030T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE

虽然我相信这个时区定义是正确的,并且事件在 STANDARD 时间内会有正确的偏移量(到目前为止在 CEST 上工作正常),但我能做些什么来确定?

我可以手动将时钟设置为 30. 10. 2016 3:00,但是这样我就无法模拟 3:00 -> 2:00 偏移转换自动发生(由于 NTP),因为我必须手动将时钟设置为一小时,我认为这将使我在夏令时更改前一小时返回。

有没有办法用自己的 NTP 服务器欺骗时间或强制 OS(在本例中为 Linux)更改时间偏移?或者任何其他模拟时间偏移变化的技巧?

好吧,最后我自己弄明白了。

对于在用户会话中启动的程序应该足以设置 USER 时区(例如在 KDE 时间小程序中)。但是对于 Thunderbird 中的 Lightning 日历,您必须在 Lightning 自己的设置中设置时区。并且不要忘记关闭 Ligtning window 并再次打开它以应用更改。

对于用户会话之外的进程,我假设您必须更改系统范围的时区。

然后将日期 forward/backward 设置为您要测试的任何时间。