Проблема с образцом Apple EKEvent - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь получить события из календарного приложения пользователя.Это само по себе работает хорошо, но одна вещь не совсем правильно.Я отображаю title, location, startDate и endDate в разных ярлыках.Теперь моя проблема в том, что и endDate, и startDate работают на один час позже, поэтому, когда я устанавливаю событие на 19:00, в моем приложении оно отображается как 18:00.Я использую этот код:

// Create the predicate's start and end dates.
CFGregorianDate gregorianStartDate, gregorianEndDate;
CFGregorianUnits startUnits = {0, 0, -30, 0, 0, 0};
CFGregorianUnits endUnits = {0, 0, 15, 0, 0, 0};
CFTimeZoneRef timeZone = CFTimeZoneCopySystem();

gregorianStartDate = CFAbsoluteTimeGetGregorianDate(
CFAbsoluteTimeAddGregorianUnits(CFAbsoluteTimeGetCurrent(), timeZone, startUnits),
timeZone);
gregorianStartDate.hour = 0;
gregorianStartDate.minute = 0;
gregorianStartDate.second = 0;

gregorianEndDate = CFAbsoluteTimeGetGregorianDate(
CFAbsoluteTimeAddGregorianUnits(CFAbsoluteTimeGetCurrent(), timeZone, endUnits),
timeZone);
gregorianEndDate.hour = 0;
gregorianEndDate.minute = 0;
gregorianEndDate.second = 0;

NSDate* startDate =
[NSDate     dateWithTimeIntervalSinceReferenceDate:CFGregorianDateGetAbsoluteTime(gregorianStartDate,     timeZone)];
NSDate* endDate =
[NSDate     dateWithTimeIntervalSinceReferenceDate:CFGregorianDateGetAbsoluteTime(gregorianEndDate, timeZone)];

CFRelease(timeZone);

// Create the predicate.
NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate     endDate:endDate calendars:nil]; // eventStore is an instance variable.

// Fetch all events that match the predicate.
NSArray *events = [eventStore eventsMatchingPredicate:predicate];

У кого-нибудь есть идеи, как это исправить?Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Хорошо, разобрался сам.Что мне нужно было сделать, это добавить эту строку:

int z = [[NSTimeZone localTimeZone] secondsFromGMT] / 3600; 

и добавить z к startDate и endDate

1 голос
/ 12 декабря 2011

Вы уверены, что часовой пояс для системы совпадает с часовым поясом для календаря? У меня раньше были странные проблемы, когда они немного отличались (на час или два), потому что я был в другом часовом поясе, чем когда я создавал событие календаря. Нечетная проблема.

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