1

ユーザーのカレンダーアプリからイベントを取得しようとしています。それ自体は問題なく機能しますが、1つだけ正しくありません。title、、、を別のラベルでlocation表示しています。さて、私の問題は、両方が1時間遅れて実行されていることです。そのため、イベントを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を追加しstartDateますendDate

于 2011-12-13T19:00:56.470 に答える
1

システムのタイムゾーンがカレンダーのタイムゾーンと同じであると確信していますか。カレンダーイベントを作成したときとは異なるタイムゾーンにいたため、以前は少し異なっていた(1〜2時間)という奇妙な問題がありました。奇妙な問題。

于 2011-12-11T20:46:09.203 に答える