我是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
我们在这里可以看到前一天。但它们应该是一样的。
我希望我对自己的问题非常清楚,但如果有任何问题,你可以问我。
感谢您的期待。
答案 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]调整您的用户设置,然后让魔术发生:-)您的活动日期将根据您的用户观点设置为当前日期。
干杯,