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

时间:2016-05-27 16:03:36

标签: icalendar

我有生成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点 - > 2:00偏移过渡将自动发生(由于NTP),因为我必须手动将时钟设置回一小时,我认为这会让我在白天时间变化之前的时间回来。

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

1 个答案:

答案 0 :(得分:0)

好的,最终我自己弄清楚了。

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

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

然后将日期前进/后退设置为您想要测试的任何时间。