我正在开设一个全年发布活动的网站。我们提供.ICS下载,以便访问者可以将活动添加到他们的日历中。
我们最近发现,游客正在报告3月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);
答案 0 :(得分:1)
我认为您应该以包含时区的格式提供日期时间信息,例如:“Sun,2008年3月9日16:05:07 GMT”或“1997-07-16T19:20:30.45 + 01:00 “
答案 1 :(得分:1)
解决方案是完全从iCalendar中省略时区并使用UTC日期/时间。
答案 2 :(得分:0)
这一切都取决于您在日光节约时如何处理未来事件的安排......
假设您在东海岸,您的时区是EST(即GMT-5),而在3月11日之后是EDT(GMT-4)。如果您在3月15日上午11点安排活动,您希望它在格林威治标准时间下午5点(即美国东部标准时间上午11点)或格林威治标准时间下午4点(即美国东部时间上午11点)举行吗?
如果是第一个,你应该继续做你正在做的事情。如果是第二个,你可以减去1小时。只需将所有时间都视为GMT时间,您就可以避免混淆。