2011-05-30 71 views
0

我在这个问题上寻找帮助,但我没有答案。我正在使用代码设置事件提醒。使用断点和步进。我看到事件时间是正确的。下面是我如何设置我的提醒事件提醒时间设置,关闭6小时

EKEventStore *eventDB = [[[EKEventStore alloc] init]autorelease]; 
EKEvent *myEvent = [EKEvent eventWithEventStore:eventDB]; 
NSString * eventTitle = [NSString stringWithFormat:@"%@ - %@",app.dealerBusinessName,serviceOrComments.text]; 
myEvent.title = eventTitle; 




// "destinationDate" is the date I want to set the reminder for it is correct in debugger 
//its format is 2011-06-03 15:45:58 +0000 which means (i would think) that the reminder 
//should be set for 6/3/2011 3:45PM but its always 6 hours earlier (in this case at 9:45am 

NSLog(@"value: %@",destinationDate); 

    myEvent.startDate = [[[NSDate alloc] initWithTimeInterval:0 sinceDate:destinationDate ]autorelease]; 
myEvent.endDate = [[[NSDate alloc] initWithTimeInterval:3600 sinceDate:myEvent.startDate]autorelease]; 
    myEvent.allDay = NO; 

    myAlarmsArray = [[NSMutableArray alloc] init]; 
    EKAlarm *alarm1 = [EKAlarm alarmWithRelativeOffset:-3600]; // 1 Hour 
    EKAlarm *alarm2 = [EKAlarm alarmWithRelativeOffset:-86400]; // 1 Day 
    [myAlarmsArray addObject:alarm1]; 
    [myAlarmsArray addObject:alarm2]; 
    myEvent.alarms = myAlarmsArray; 



[myEvent setCalendar:[eventDB defaultCalendarForNewEvents]]; 

NSError *err; 

[eventDB saveEvent:myEvent span:EKSpanThisEvent error:&err]; 

    if (err == noErr) { 
     //no error, but do not show alert because we do that below. 
    } 

现在Im相当肯定我可以再补充21,600的时间,但正确的方式做到这一点?我不理解NSDate是如何工作的,它使我疯狂。有人可以向我解释什么是正确的方法吗?谢谢!

回答

1

最近我有类似的问题,这真的让我发疯。您必须考虑您的时区(或您的模拟器/设备设置的时区)。 NSDate总是表示GMT时间,NSCalendar表示时区内的时间。因此,您所遇到的时间差异恰恰就是您的时区与GMT之间的时差(您的闹钟在格林威治标准时间15:45触发)。

因为我希望我的日期是绝对的,不管时区如何,我将所有的NSCalendars都设置为GMT - 它适用于我的情况,当然是YMMV。

+0

感谢您的帮助理解this.I已设置一些代码,查看用户当地时间和GMT之间的时差。例如它是-21000。然后我创建了一个反转该时差的整数(将其更改为21000),并使用该整数偏移日历(该日历为日历中的本地用户设置了正确的时间)。锻炼得很好! – Louie 2011-06-03 15:08:11

+0

相关知识:-) – 2011-06-03 15:40:10