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 个选择器,您可以只使用一个选择器来完成所有这些操作。

当您使用 3 个选择器时,分配似乎需要很多时间,一个用于开始日期,一个用于结束日期,另一个用于时间,并且 UI 看起来也很时髦。

那你为什么用dateWithTimeIntervalSince1970:. 它返回一个 NSDate 对象,该对象设置为从 1970 年 1 月 1 日(格林威治标准时间)的第一时刻开始的给定秒数。你不需要它。

以 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 回答