2015-04-02 187 views
1

我给我的用户一个链接,他们可以用它们将我的系统中的约会放在Outlook等日历软件中......使用iCalendar URL。iCalendar夏令时

我生成使用此代码文件中的日期:

echo "DTSTART;TZID=" . date_default_timezone_get() . ":" . strftime('%Y%m%d', strtotime($app->app_start)) . 'T' . strftime('%H%M%S', strtotime($app->app_start)) . '' . $eol; 
echo "DTEND;TZID=" . date_default_timezone_get() . ":" . strftime('%Y%m%d', strtotime($app->app_end)) . 'T' . strftime('%H%M%S', strtotime($app->app_end)) . '' . $eol; 

这一直工作正常。但是现在我们处于夏令时,夏令时中的所有约会在我的Outlook中显示1小时太晚。 DST之前的任命都可以。

所以,例如在我的ICS:

DTSTART; TZID =欧洲/布鲁塞尔:20150318T083000 DTEND; TZID =欧洲/布鲁塞尔:20150318T090000

这正确地显示在我的日历,从08:30直到09:00

DTSTART; TZID =欧洲/布鲁塞尔:20150407T083000 DTEND; TZID =欧洲/布鲁塞尔:20150407T090000

这是我的问题,这说明错误在我的日历:从09:30至10:30。

我该如何解决这个问题?

回答

1

您需要确保您的ics文件包含时区定义,例如

BEGIN:VTIMEZONE 
TZID:US Mountain Standard Time 
BEGIN:STANDARD 
RRULE:FREQ=YEARLY;BYMONTH=0;BYDAY=+10SU 
DTSTART:16010000T000000 
TZOFFSETFROM:-0700 
TZOFFSETTO:-0700 
END:STANDARD 
END:VTIMEZONE 
BEGIN:VTIMEZONE 
TZID:Eastern Standard Time 
BEGIN:STANDARD 
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=+11SU 
DTSTART:16011101T020000 
TZOFFSETFROM:-0400 
TZOFFSETTO:-0500 
END:STANDARD 
BEGIN:DAYLIGHT 
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=+12SU 
DTSTART:16010302T020000 
TZOFFSETFROM:-0500 
TZOFFSETTO:-0400 
END:DAYLIGHT 
END:VTIMEZONE 
+0

谢谢,我将欧洲/布鲁塞尔时区添加到VTIMEZONE,它现在可以工作。 一旦有人需要欧洲/布鲁塞尔VTIMEZONE: 'BEGIN:VTIMEZONE TZID:欧洲/布鲁塞尔 X-LIC-地点:欧洲/布鲁塞尔 BEGIN:日光 TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME :CEST DTSTART:19700329T020000 RRULE:FREQ = YEARLY; BYMONTH = 3; BYDAY = -1SU END:日光 BEGIN:STANDARD TZOFFSETFROM:0200 TZOFFSETTO:0100 TZNAME:CET DTSTART:19701025T030000 RRULE: FREQ = YEARLY; BYMONTH = 10; BYDAY = -1SU END:STANDARD END:VTIMEZONE' – user1026090 2015-04-02 14:54:49