Время напоминания о событии установлено, выключено на 6 часов - PullRequest
0 голосов
/ 30 мая 2011

Я искал помощи по этому вопросу, но мне не хватает ответа.Я устанавливаю напоминание о событии с кодом.Используя точки останова и шагая через.Я вижу, что время события правильное.Ниже показано, как установить напоминание

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.
    }

Теперь я уверен, что могу добавить 21 600 к времени, но это правильный способ сделать это?Я не понимаю, как работает NSDate, и это сводит меня с ума.Может кто-нибудь объяснить мне, как это правильно сделать?Спасибо!

1 Ответ

1 голос
/ 30 мая 2011

У меня была похожая проблема в последнее время, это действительно сводило меня с ума.Вы должны принять во внимание ваш часовой пояс (или часовой пояс, установленный для вашего симулятора / устройства).NSDate представляет всегда время по Гринвичу, NSCalendar время в пределах часового пояса.Таким образом, разница во времени, которую вы испытываете, будет точно равна разнице во времени между вашим часовым поясом и временем по Гринвичу (ваш сигнал тревоги срабатывает в 15:45 по Гринвичу).

Поскольку я хочу, чтобы мои даты были абсолютными, независимо от временизона, я устанавливаю все мои NSCalendars в GMT - это работает в моем случае, конечно, YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...