我们的应用程序会显示用户可能感兴趣的事件列表。当他们选择一个事件时,我们会让它们通过EKEventEditViewController
日历表格将其添加到日历中。
通常,用户会选择一个与他们关系密切的活动。然而,他们可能会选择一个活动并前往它或在电视上观看一个遥远的事件。在下面的代码片段中,硬编码值都来自服务器。我的模拟活动是在科罗拉多州丹佛市上午9点到下午2点。用户可以在任何地方,可能会或可能不会旅行。
问题#1:我应该将事件的时区设置为事件发生的位置吗? 我不应该把它设置为零,因为我没有浮动事件。但是,我应该省略设置它是否需要当前时区或将其设置为事件的时区?无论我是否设置,事件的开始日期/时间都显示正确。如果我将事件的时区设置为MDT但在波士顿(EDT)创建事件。如果我飞往科罗拉多州,它仍然是正确的吗?
问题2:我是否也应该设置日历的时区? 纽约市的用户是否希望看到上午9点到下午2点(事件发生在丹佛时),并且当他们看到上午11点到下午4点出现时吓坏了?或者用户会说“啊,我明白你在那里做了什么。”?很抱歉“询问和回答”但是9AM事件 在纽约上午11点如果我想在电视上观看它,如果我没有设置此值,则DATE对象具有“不正确”的时间。我只是担心用户会感到困惑和/或我的时区设置的整体组合不正确。
代码:
EKEvent *event = [EKEvent eventWithEventStore:store];
event.title = @"My event title";
event.notes = @"Some event notes";
event.location = @"Denver, CO";
event.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"MDT"]; // <-- Q1
event.calendar = [store defaultCalendarForNewEvents];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"MDT"]]; // <-- Q2
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = 2014;
components.month = 5;
components.day = 5;
components.hour = 9;
components.minute = 0;
event.startDate = [calendar dateFromComponents:components];
components.year = 2014;
components.month = 5;
components.day = 5;
components.hour = 14;
components.minute = 0;
event.endDate = [calendar dateFromComponents:components];
如果这两个事件和日历时区设置为MDT,NYC用户看到上午11点到下午4点,这里是事件obj:
EKEvent <0xd45b530> {
title = My event title;
location = Denver, CO;
calendar = EKCalendar <0xceef2a0> {title = Calendar; type = Local; allowsModify = YES; color = #1BADF8;};
alarms = (null);
URL = (null);
lastModified = (null);
timeZone = America/Denver (MDT) offset -21600 (Daylight)
};
location = Denver, CO;
startDate = 2014-03-22 15:00:00 +0000;
endDate = 2014-03-22 20:00:00 +0000;
allDay = 0;
floating = 0;
recurrence = (null);
attendees = (null)
};
如果事件timeZone设置为MDT但未设置日历时区,则NYC用户将看到9 AM-2PM
EKEvent <0xce3d740>
{ title = My event title;
location = Denver, CO;
calendar = EKCalendar <0xdcb1340> {title = Calendar; type = Local; allowsModify = YES; color = #1BADF8;};
alarms = (null);
URL = (null);
lastModified = (null);
timeZone = America/Denver (MDT) offset -21600 (Daylight)
};
location = Denver, CO;
startDate = 2014-03-22 13:00:00 +0000;
endDate = 2014-03-22 18:00:00 +0000;
allDay = 0;
floating = 0;
recurrence = (null);
attendees = (null)
};
似乎我必须设置BOTH事件和日历时区以匹配事件的位置,但是会感谢之前已经走过这条路的人的反馈,因为我不想让创建事件的人弄错在一个地方然后去旅行看看。
非常感谢!