我应该根据活动地点或用户的当前位置设置活动的时区吗?

时间:2014-03-16 23:52:48

标签: ios eventkit

我们的应用程序会显示用户可能感兴趣的事件列表。当他们选择一个事件时,我们会让它们通过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事件和日历时区以匹配事件的位置,但是会感谢之前已经走过这条路的人的反馈,因为我不想让创建事件的人弄错在一个地方然后去旅行看看。

非常感谢!

0 个答案:

没有答案