我已经在这个问题上寻求帮助,但我找不到答案。我正在用代码设置事件提醒。使用断点和单步执行。我看到事件的时间是正确的。下面是我如何设置我的提醒
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.
}现在我非常确定我可以在时间上增加21600,但这是正确的方法吗?我不明白NSDate是如何工作的,这让我抓狂。谁能给我解释一下做这件事的正确方法是什么?谢谢!
发布于 2011-05-30 15:30:23
我最近遇到了一个类似的问题,它真的让我发疯。您必须考虑您的时区(或您的模拟器/设备设置的时区)。NSDate表示总是格林尼治标准时间,NSCalendar表示时区内的时间。因此,您正在经历的时差将是您的时区和GMT之间的时差(您的闹钟在GMT时间15:45触发)。
因为我希望我的日期是绝对的,而不考虑时区,所以我将所有的NSCalendars设置为格林威治时间-它在我的情况下是有效的,当然是YMMV。
https://stackoverflow.com/questions/6173184
复制相似问题