保存后一天中日历集中的事件日期

时间:2013-04-10 08:13:24

标签: objective-c ios6 calendar nsdate ekevent

我是EKEventKit的新手,我正在尝试使用EKEvent在日历中创建一个事件。它工作正常,但在我再次检查事件日期后保存事件后,它提前一天。

我在这里用输出编写代码。请看看

EKEventStore *eventStore = [[EKEventStore alloc]init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        EKEvent *event = [EKEvent eventWithEventStore:eventStore];

        // set Event Title and Notes
        event.title = @"My New Event";
        event.notes = @"New event notes are added by azeem";

        // set Event Start and End date here
        NSLog(@"before saving Date: %@",[NSDate date]);
        event.startDate = [NSDate date];
        event.endDate =[NSDate date];

        // set Evet other Properties here
        event.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
        event.calendar = [eventStore defaultCalendarForNewEvents];
        event.allDay = YES;

        [eventStore saveEvent:event span:EKSpanThisEvent error:&error];
        NSLog(@"After saving Date: %@",event.startDate);

OUTPUT ::

Before Saving Date : 2013-04-10 08:00:40 +0000
After Saving Date:   2013-04-09 00:00:00 +0000

我们在这里可以看到前一天。但它们应该是一样的。

我希望我对自己的问题非常清楚,但如果有任何问题,你可以问我。

感谢您的期待。

2 个答案:

答案 0 :(得分:1)

为什么要取消时区?如果您的申请是针对不同的国家,那么您不应该这样做。

event.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

是的,打印的NSDate与将添加到EvencCalendar的日期不同 - 没关系(因为GMT + x等)。添加日期将等于您的开始日期。

答案 1 :(得分:0)

我无法重现你的问题...... [NSDate日期]提前1天返回日期似乎确实很奇怪。 你确定不是event.startDate和event.endDate得到改变吗? 我通过以下日志获得了您的描述行为:

event.startDate = [NSDate date];
NSLog(@"before saving Date: %@",event.startDate);
event.endDate =[NSDate date];

// set Evet other Properties here
event.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:10];
event.calendar = [eventStore defaultCalendarForNewEvents];
event.allDay = YES;

[eventStore saveEvent:event span:EKSpanThisEvent error:&error];
NSLog(@"After saving Date: %@",event.startDate);

这是由于timeZone的设置。 我建议使用[NSTimeZone systemTimeZone]或[NSTimeZone localTimeZone]调整您的用户设置,然后让魔术发生:-)您的活动日期将根据您的用户观点设置为当前日期。

干杯,