在向日历Xcode添加事件时处理通用时间(使用T)

时间:2014-10-26 20:14:57

标签: ios utc ekeventstore

我正试图在任何地方找到答案,包括StackOverflow ..我在从字符串添加时间事件时遇到问题,如下所示:2014-12-31T19:00:00-06:00。我顺便从XML解析这个。其余的代码,包括标签等工作正常。

所以这是我在日历中添加新事件的代码(我试图将'dateFromString'添加为名称,当前时间检查并通过):

EKEventStore *store = [[EKEventStore alloc] init];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (!granted) { return; }
    EKEvent *event = [EKEvent eventWithEventStore:store];
    event.title = tempNameOfEvent;
    event.startDate = dateFromString; //here is a NSDate but incorrectly formatted
    event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
    [event setCalendar:[store defaultCalendarForNewEvents]];
    NSError *err = nil;
    [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
}];

来自Programmatically add custom event in the iPhone Calendar的代码

那么,我应该如何格式化NSDate以使用EKEventStore?我应该尝试将其添加为“yyyy-MMM-dd HH:mm:ss ZZZ”,看起来像“2007-01-09 17:00:00 +0000”?如何用“-06:00”解析字符串并消除部分? (来自XML的给定时间如下:2014-12-31T19:00:00-06:00)。

2 个答案:

答案 0 :(得分:1)

也许你可以使用Google? https://developers.google.com/google-apps/calendar/v3/reference/events/insert 这将是一个好主意,因为您将能够这样做: calendarId string日历标识符。

答案 1 :(得分:0)

您的月份格式错误,应该是' MM',缺少引用' T'并在&x; xxx'之前添加不需要的空格。

使用:yyyy-MM-dd' H&H:mm:ssxxx

请参阅:ICU Formatting Dates and Times
另外:Date Field SymbolTable.

示例:

NSString *ds = @"2014-12-31T19:00:00-06:00";
NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssxxx"];
NSDate *d = [df dateFromString:ds];
NSLog(@"d: %@", d);

输出:

  

d:2015-01-01 01:00:00 +0000

输出表单只是NSDate提供的默认显示,如果您希望特定格式使用NSDateFormatter来创建要显示的字符串。

请注意,显示的日期是UTC格式,因此它在下一年提供的日期。 ; - )

你可能不想消除时区,NSDates是自2001年1月1日第一个时刻以来的时间,格林尼治标准时间,所以时区是非常必要的,除非你做的事情是非标准的。