2011-05-30 29 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