2016-04-26 7 views
0

Анонсов Я создал следующий файл ICS:ошибка плавающего времени использования

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//ddaysoftware.com//NONSGML DDay.iCal 1.0//EN 
BEGIN:VTIMEZONE 
TZID:Romance Standard Time 
BEGIN:STANDARD 
DTSTART:20151002T030000 
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYHOUR=3;BYMINUTE=0;BYMONTH=10 
TZNAME:Paris\, Madrid 
TZOFFSETFROM:+0200 
TZOFFSETTO:+0100 
END:STANDARD 
BEGIN:DAYLIGHT 
DTSTART:20150301T020000 
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYHOUR=2;BYMINUTE=0;BYMONTH=3 
TZNAME:Paris\, Madrid (heure d’été) 
TZOFFSETFROM:+0100 
TZOFFSETTO:+0200 
END:DAYLIGHT 
END:VTIMEZONE 
BEGIN:VEVENT 
DESCRIPTION:ACCESS initiation 
DTEND:20160810T170000 
DTSTAMP:20160426T073625Z 
DTSTART:20160810T090000 
LOCATION:Bruxelles Formation 
SEQUENCE:0 
SUMMARY: ACCESS initiation 
UID:acd169c5-7cce-4085-b0bb-88b25bc6fd46 
END:VEVENT 
BEGIN:VEVENT 
DESCRIPTION:ACCESS initiation 
DTEND:20160811T170000 
DTSTAMP:20160426T073625Z 
DTSTART:20160811T090000 
LOCATION:Formation 
SEQUENCE:0 
SUMMARY:ACCESS initiation 
UID:8c7f3bd0-6cad-41df-943c-ed42a1ea6ca0 
END:VEVENT 
BEGIN:VEVENT 
DESCRIPTION:ACCESS initiation 
DTEND:20160812T170000 
DTSTAMP:20160426T073625Z 
DTSTART:20160812T090000 
LOCATION:Bruxelles Formation 
SEQUENCE:0 
SUMMARY: ACCESS initiation 
UID:32409720-95a8-4f79-b788-77f707ff8002 
END:VEVENT 
END:VCALENDAR 

И насколько я понимаю, что я должен добавить «Z» в конце каждой дату DTEND и DTSTART. Я сделал это, но затем в Outlook у меня нет сообщения об ошибке, но все время на 2 часа позже, чем должно быть.

Это код:

DDay.iCal.iCalendar iCal = new DDay.iCal.iCalendar(); 
iCal.AddLocalTimeZone(); 
evt.Start = new iCalDateTime(tempStart); 
evt.End = new iCalDateTime(tempEnd);     
evt.Start.IsUniversalTime = true; //gives the Z in the end of the date 
evt.End.IsUniversalTime = true; 

Как я могу исправить разницу в 2 часа?

ответ

0

«Z» означает универсальное время или UTC.

Вы имеете следующую строку в определении:

TZOFFSETTO:+0200 

Это означает, что местное время 2 часа больше, чем UTC. Добавление «Z» означает, что время рассматривается как время UTC, поэтому на 2 часа отличается от ожидаемого.

Просто есть:

evt.Start.IsUniversalTime = false; 
evt.End.IsUniversalTime = false; 

и время должно быть то, что вы ожидаете.

Другой подход заключается в преобразовании всех времен в UTC перед сохранением:

evt.Start = evt.Start.ToUniversalTime(); 
evt.End = evt.End.ToUniversalTime(); 

Source

Тогда времени будет UTC, хотя вам необходимо преобразовать обратно в UTC при отображении в качестве локального время.

+0

Я пробовал, что результат - это дата без Z в конце и ошибка Outlook с плавающей точкой ... – Natalia

+0

Я нашел решение. Мне пришлось добавить TZID как DTEND, так и DTSTART, в моем случае я добавил «Romance Standard». – Natalia

Смежные вопросы