Как справиться с переходом на летнее время при планировании будущих событий? - PullRequest
0 голосов
/ 29 февраля 2012

Я работаю над сайтом, который публикует события в течение года.Мы предлагаем загрузку .ICS, чтобы посетители могли добавлять события в свои календари.

Недавно мы обнаружили, что посетители сообщают о том, что время выключения (плюс или минус один час в зависимости от их местоположения) для событий, которые происходят после11 марта. По сути, это «истинное» время, когда событие произойдет с учетом временного сдвига, но проблема в том, что событие было запланировано на определенное время, которое не следует корректировать.

Какодин обойти эту проблему?Все мои попытки компенсировать это путем прибавления или вычитания часа привели к тому, что он сломался либо для восточного, либо для западного побережья.

Возможный связанный с этим вопрос здесь: https://stackoverflow.com/questions/9484447/scheduling-events-and-daylight-savings-time

ОБНОВЛЕНИЕ: вот кодЯ использую:

// Create calendar and add the desired timezone
DDay.iCal.iCalendar iCal = new DDay.iCal.iCalendar();
var targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById(tzid);
iCal.AddTimeZone(targetTimeZone);

// Create the event and add it to the calendar
DDay.iCal.Event evt = iCal.Create<DDay.iCal.Event>();

// Adjust the start/end date by one hour if the dates/times fall under daylight savings in the target timezone
if (targetTimeZone.IsDaylightSavingTime(endDt))
    endDt = endDt.AddHours(-1);
evt.DTEnd = new iCalDateTime(endDt, tzid);

if (targetTimeZone.IsDaylightSavingTime(startDt))
    startDt = startDt.AddHours(-1);
evt.DTStart = new iCalDateTime(startDt, tzid);

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Я думаю, вы должны предоставить информацию о дате и времени в формате, который также содержит часовой пояс, например: «Sun, 09 Mar 2008 16:05:07 GMT» или «1997-07-16T19: 20: 30.45 + 01: 00"

1 голос
/ 13 марта 2012

Решением было полное исключение часового пояса из iCalendar и использование даты / времени в формате UTC.

0 голосов
/ 29 февраля 2012

Все зависит от того, как вы хотите управлять планированием будущих событий, когда речь идет о летнем времени ...

Скажем, вы на восточном побережье, ваш часовой пояс EST (то есть GMT-5), а после 11 марта - EDT (GMT-4).Если вы запланируете мероприятие на 11:00 на 15 марта, хотите ли вы, чтобы оно состоялось в 17:00 по Гринвичу (то есть в 11:00 по восточному поясному времени) или в 16:00 по Гринвичу (то есть в 11:00 по восточному поясному времени)?

Если это первое,Вы должны продолжать делать то, что вы делаете.Если это второе, вы можете просто вычесть 1 час из времени.Просто думайте о времени как о времени по Гринвичу, и вы избежите путаницы.

...