向日历添加事件时,NSDateFormatter未正确格式化日期

时间:2013-04-26 21:55:08

标签: ios objective-c nsdate nsdateformatter ekevent

我无法弄清楚如何使用NSDateFormatter解析某个日期格式并将其放入EKEvent。目前这是我的代码。我已经请求了添加事件的权限,并且从requestAccessToEntityType的完成处理程序调用了方法:completion:

-(void) performCalendarOperation {
    NSString *startString = @"04/28/2013 2:30 PM";
    NSString *endString = @"04/28/2013 5:30 PM";

    EKEvent *newEvent = [EKEvent eventWithEventStore:self.eventStore];
    [newEvent setCalendar:[self.eventStore defaultCalendarForNewEvents]];
    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    [format setDateFormat:@"MM/dd/yyyy hh:mm a"];

    newEvent.startDate = [format dateFromString:startString];
    newEvent.endDate = [format dateFromString:endString];

    NSLog(@"START:%@\n\nEND:%@\n\n", newEvent.startDate, newEvent.endDate);
}

NSLog打印以下内容:

START:2013-04-28 21:30:00 +0000
结束:2013-04-29 00:30:00 +0000

在这种特殊情况下,我希望这是12小时的时间

对于此样式的日期字符串,NSDateFormatter格式字符串似乎是正确的,但由于某种原因输出不正确。事实上,在设置了更多属性之后,事件实际上会在代码中添加到日历中,但这对于这个问题并不重要 就像一个注释,当我在iOS 6.0之前解析日期时,我从未遇到过这个问题,所以也许它是API或格式的某些变化的工件,我不考虑?我有没有看到任何明显的错误?

感谢。

1 个答案:

答案 0 :(得分:0)

NSLog始终以24小时和时区GMT + 0 / UTC打印。这就是为什么它看起来不正确,但它实际上是。如果要使用NSLog正确打印日期,则需要使用NSDateFormatter根据自己的喜好格式化日期(使用stringFromDate)。