0

リマインダーをカレンダーに保存しようとしています。保存されましたが、日付と時刻が間違っています。

編集 基本的に、開始日を startDate ピッカーから選択し、終了日を endDate ピッカーから選択して、リマインダーをカレンダーに保存したいと考えています。リマインダー時間ピッカーから選択された時間。任意の日時。

以下は私のコードです。ここで私が間違っていること

EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
event.title = productTextField.text;

   [event setCalendar:[eventStore defaultCalendarForNewEvents]];

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];//This is working

NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[reminderTime getDate]];

NSInteger hour = [components hour];
NSInteger minute = [components minute];
NSDate *reminderDateAndTime = [NSDate dateWithTimeIntervalSince1970: [[startDate getDate] timeIntervalSince1970] + (minute * 60) + (hour * 60 * 60)];
 NSDate *endDateAndTime = [NSDate dateWithTimeIntervalSince1970: [[endDate getDate] timeIntervalSince1970] ];
 event.startDate = reminderDateAndTime;

event.endDate   = endDateAndTime;

    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
4

2 に答える 2

4

基本的には、開始日を startDate ピッカーから選択し、終了日を endDate ピッカーから選択して、リマインダーをカレンダーに保存したいと考えています。リマインダー時間ピッカーから選択された時間。任意の日時。

2 つまたは 3 つのピッカーも必要ありません。このすべての操作に 1 つのピッカーのみを使用できます。

開始日用、終了日用、時間用の 3 つのピッカーを使用すると、割り当てに多くの時間がかかっているようで、UI もファンキーに見えます。

では、なぜ を使用しているのですかdateWithTimeIntervalSince1970:。GMT の 1970 年 1 月 1 日の最初の瞬間からの指定された秒数に設定された NSDate オブジェクトを返します。あなたはそれを必要としません。

例として BOOL を取り上げます。BOOL dateValue

dateValue が true の場合は開始日を取得し、false の場合は終了日を取得します。

次のように、最初に選択された日付を取得します。

NSDate *startDate = [datePicker date];

注: 開始日を選択したら、ピッカーの最小日付を最初に選択した開始日として設定します。

その後、ユーザーは開始日の前に終了日を選択できません。

于 2012-10-30T11:49:50.490 に答える
0

私は自分が間違っていたことを理解しました。以下のコードは正常に動作します(他のユーザーのためにここにコードを投稿してください)

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];


// Break the date up into components
NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                               fromDate:[startDate getDate]];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                               fromDate:[reminderTime getDate]];

NSDateComponents *dateComponentsEnd = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                               fromDate:[endDate getDate]];

 [event setCalendar:[eventStore defaultCalendarForNewEvents]];

// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];
// Notification will fire in one minute
[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *startDatee = [calendar dateFromComponents:dateComps];
NSDateComponents *dateCompsEnd = [[NSDateComponents alloc] init];
[dateCompsEnd setDay:[dateComponentsEnd day]];
[dateCompsEnd setMonth:[dateComponentsEnd month]];
[dateCompsEnd setYear:[dateComponentsEnd year]];
NSDate *endDatee = [calendar dateFromComponents:dateCompsEnd];
event.startDate=startDatee;
event.endDate=endDatee;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
于 2012-10-30T14:56:04.847 に答える