2012-02-28 3 views
0

나는 일년 내내 이벤트를 게시하는 웹 사이트에서 일하고 있습니다. .ICS 다운로드를 제공하여 방문자가 캘린더에 일정을 추가 할 수 있습니다.미래 이벤트 일정을 계획 할 때 일광 절약을 어떻게 처리합니까?

우리는 최근에 방문자가 3 월 11 일 이후에 발생하는 이벤트에 대해 해제 될 시간 (위치에 따라 1 시간 또는 1 시간)을보고한다는 사실을 발견했습니다. 기본적으로 이것은 이벤트가 발생하는 "실제"시간입니다 시간 이동이지만 문제는 조정할 수없는 특정 시간에 일정이 계획되었다는 것입니다.

어떻게이 문제를 해결할 수 있습니까? 시간을 더하거나 뺄 때 보완하려는 모든 노력으로 동해안이나 서해안에서 부서지기 시작했습니다. 여기

가능한 관련 질문 : https://stackoverflow.com/questions/9484447/scheduling-events-and-daylight-savings-time

UPDATE :

// 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); 

답변

1

해결 방법은 iCalendar에서 시간대를 완전히 생략하고 UTC 날짜/시간을 사용하는 것입니다.

+1

나는 이것이 몇 년 전인 줄 알지만 가장자리 사건으로 1 시간 불일치 할 것이다. 지금 당장 다루고있다. . DST가 아닌 미래의 일정에 대해 DST 중에 일정이 잡히면 해당 날짜에 DST가 변경되면 이전에 입력 한 날짜가 한 시간 늦게 표시됩니다. DST가 아닌 DST의 시간은 물론 다른 방향으로 1 시간 늦어집니다. – Bon

+1

@Bon 나는 NodaTime 사용을 권장합니다. 업데이트 된 DST 일정이 있으며 로컬 시간대로 /에서 변환 할 때 DST가 켜져 있는지 여부에 따라 올바른 오프셋을 자동으로 빼거나 추가합니다. – Yashvit

0

그것은 모두가 따라 일광 절약에 관한 한 때 미래의 사건을 일정 처리하는 방법 : 여기 내가 사용하고있는 코드입니다. ..

당신이 동부 해안에 있다고 가정하면, 시간대는 EST (GMT-5)이고 3 월 11 일 이후는 EDT (GMT-4)입니다. 3 월 15 일 오전 11시에 이벤트 일정을 잡으면 오후 5시 (그리니치 표준시) 또는 4시 (그리니치 표준시) 오전 11시 (동부 표준시)로 이벤트를 수행 하시겠습니까?

첫 번째라면 계속하고 있어야합니다. 두 번째 인 경우 시간에서 1 시간을 뺄 수 있습니다. GMT 시대의 모든 시간을 생각하면 혼란을 피할 수 있습니다.

+0

감사합니다. 나중에 내가 목표하고있는 것은, 그러나 시간을 빼고 웨스트 코스트에서 .ICS를 다운로드하면 잘못된 방향으로 보상하여 5 시간 앞당겨 (3 대신) 일정을 잡습니다. 그러나 한 시간을 빼면 동해안을 위해 수정됩니다. –

+0

서해안은 나중에 PDT로 이동합니까? – zmbq

+0

UTC를 사용하면 시간이 완전히 정의 된 이벤트 (예 : 3 월 28 일 오후 4시 52 분)를 처리하는 데 좋은 방법입니다. 매일 또는 주간 행사에서 항상 도움이되는 것은 아닙니다. 매주 일요일 오전 1시 59 분에 발생하는 이벤트와 오전 3시 1 분에 발생하는 이벤트 사이에 얼마나 많은 시간이 있습니까? – supercat

1

"Sun, 09 Mar 2008 16:05:07 GMT"또는 "1997-07-16T19 : 20 : 30.45 + 01 : 00 "

+0

감사합니다. 몇 가지 예제 코드로 제 질문을 업데이트했습니다. 내가 사용하는 시스템이 UTC로 날짜를 저장하고 있는지 잘 모르겠다 ... –

관련 문제