我正在尝试在日历中保存提醒。它被保存但日期和时间错误。
编辑基本上我想在日历中保存提醒,其中包含从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];
答案 0 :(得分:4)
基本上我想在日历中保存提醒,其中包含从startDate选取器中选择的开始日期和从endDate选取器中选择的结束日期。和提醒时间选择器中选择的时间。任何日期和时间。
您也不需要2个或3个拣货员,所有这些操作只能使用一个拣货员。
当你使用3个选择器,一个用于开始日期,一个用于结束日期和其他用于时间,并且UI看起来也很时髦时,似乎分配花费很多。
那你为什么要使用dateWithTimeIntervalSince1970:
。它返回一个NSDate对象,该对象设置为1970年1月1日GMT第一个瞬间的给定秒数。你不需要它。
以BOOL为例:BOOL dateValue
如果dateValue为true,请获取开始日期,如果为false则获取结束日期。
只需获得第一个选定日期:
NSDate *startDate = [datePicker date];
注意:选择开始日期后,将选择器的最短日期设置为您选择的第一个开始日期。
然后用户无法在开始日期之前选择结束日期。
答案 1 :(得分: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];