1

我正在尝试从用户的日历应用程序中获取事件。这本身工作正常,但有一件事并不完全正确。我在不同的标签中显示titlelocation和。现在,我的问题是两者都晚了一个小时,所以当我将事件设置为 19:00 时,它在我的应用程序中显示为 18:00。我正在使用这段代码:startDateendDateendDatestartDate

// 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];

有人知道如何解决这个问题吗?提前致谢!

4

2 回答 2

3

好吧,我自己想通了。我必须做的是添加这一行:

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

并将 z 添加到startDateandendDate

于 2011-12-13T19:00:56.470 回答
1

您是否确定系统的时区与日历的时区相同。我之前遇到过一些奇怪的问题,因为我与创建日历事件时所处的时区不同(相差一两个小时)。奇怪的问题。

于 2011-12-11T20:46:09.203 回答