将事件添加到日历Xcode时处理世界时(带T)



我正试图在所有地方找到答案,包括StackOverflow。。我在从如下字符串中添加时间事件时遇到问题:2014-12-31T19:0: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];
}];

在iPhone日历中编程添加自定义事件的代码

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

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

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

使用:yyyy-MM-dd-'T'HH:MM:ssxxx

请参阅:ICU格式化日期和时间
还有:日期字段符号表。

示例:

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日格林尼治标准时间第一刻以来的时间,所以时区是非常必要的,除非你在做一些相当不标准的事情。

最新更新