4

我试图在包括 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];
}];

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

那么,我应该如何格式化 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)。

4

2 回答 2

1

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

于 2014-12-11T00:34:43.527 回答
0

您的月份格式错误,应该是“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,如果您想要特定格式,请使用 aNSDateFormatter创建要显示的字符串。

请注意,显示的日期为 UTC,因此提供的日期为下一年。;-)

您可能不想消除时区,NSDates因为自 2001 年 1 月 1 日的第一刻起,格林威治标准时间,所以时区是非常必要的,除非您正在做一些非标准的事情。

于 2014-10-26T20:29:09.737 回答