Проблема в том, что ваша строка даты не содержит всю информацию из средства выбора и не содержит достаточно информации для воссоздания даты.В нем отсутствуют День, Месяц и Год, поэтому при его повторном создании предполагается, что вы хотите начать с запуска календарной системы iOS NSDate
.
Вам либо нужно сохранить NSDate
что вы получаете от сборщика (предпочтительно), или вам нужно использовать формат даты, который содержит достаточно информации для создания конкретной даты и времени.
РЕДАКТИРОВАТЬ
На основе вашего комментарияВы хотите просто использовать день недели и время из datePicker и определить следующую дату в будущем с этими значениями.Вот код, который выполнит это:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *pickerDate = self.datePickerView.date;
NSDateComponents *pickerComps = [cal components: NSWeekdayCalendarUnit |
NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit
fromDate:pickerDate];
NSDate *currentDate = [NSDate date];
NSDateComponents *currentComps = [cal components: NSYearCalendarUnit |
NSMonthCalendarUnit |
NSWeekdayCalendarUnit |
NSDayCalendarUnit |
NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit
fromDate:currentDate];
// Start with the current date and add/subtract the number of days needed to make it the same day of the week
NSDateComponents *newComps = [currentComps copy];
NSUInteger weekdayDiff = pickerComps.weekday - currentComps.weekday;
newComps.day = newComps.day + weekdayDiff;
// If needed, add 7 days in order to move this date into the future
if (newComps.day < currentComps.day) {
newComps.day = newComps.day + 7;
}
NSDate *newDate = [cal dateFromComponents:newComps];
if ([newDate compare:currentDate] == NSOrderedAscending) {
// This is true when the weekday started out the same but the time of day is earlier in the picker.
// Add 7 days
newComps.day = newComps.day + 7;
newDate = [cal dateFromComponents:newComps];
}
NSLog(@"%@", newDate);