Как изменить год на год до текущего года?

У меня есть один массив, что-то вроде ниже

Birthdates( "03/12/2013", "03/12/2013", "08/13/1990", "12/09/1989", "02/06", "09/08", "03/02/1990", "08/22/1989", "03/02", "05/13", "10/16", "07/08", "08/31/1990", "04/14/1992", "12/15/1905", "08/14/1989", "10/07/1987", "07/25", "07/17/1989", "03/24/1987", "07/28/1988", "01/21/1990", "10/13" ) 

все это NSString

теперь я хочу сделать еще один массив из этого, в котором все годы должны быть в 2013 году, если эта дата наступит в текущем году, и если дата уже прошла, то измените год до 2014 года?

в приведенном выше предложении мы не рассматриваем год, который мы рассматриваем только день и месяц, а затем видим, что в текущем году он уже прошел или нет?

Например, если дата равна «12/15/1905», затем преобразуйте ее в другой массив, например «12/15/2013», но если дата похожа на «01/01/1990», тогда конвертируйте ее в другой массив, например «01/01/2014 «bcoz он уже прошел текущую дату. PLZ помогите вам заблаговременно 🙂

я предпочел бы сделать что-то, в котором применяется код не только 2013 и 2014 гг., он должен применяться и к будущему будущему.

Этот код такой же, как и код Anoop Vaidya, до получения всех dateStrings в один формат. но логика сравнения даты, которая не выполняется в коде Anoop, заканчивается здесь, т.е. когда count == 2 ..

Вот мой отредактированный код, относящийся к Anoop

  NSArray *[email protected][ @"03/12/2013", @"03/12/2013", @"08/13/1990", @"12/09/1989", @"02/06", @"09/08", @"03/02/1990", @"08/22/1989", @"03/02"]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy"]; NSString *curYear = [dateFormatter stringFromDate:[NSDate date]]; NSString *nextYear = [NSString stringWithFormat: @"%d", ([curYear intValue] + 1)]; [dateFormatter setDateFormat:@"MM/dd/yyyy"]; NSMutableArray *newBirthDates=[NSMutableArray new]; for(NSString *str in Birthdates){ NSArray *array=[str componentsSeparatedByString:@"/"]; if(array.count==2){ [newBirthDates addObject:[NSString stringWithFormat:@"%@/%@",str,curYear]]; } else{ [newBirthDates addObject:[NSString stringWithFormat:@"%@/%@/%@",array[0],array[1],curYear]]; } } for(int i = 0; i < [newBirthDates count]; i++) { NSString *dateStr = [newBirthDates objectAtIndex:i]; NSComparisonResult comResult = [[dateFormatter dateFromString:dateStr] compare:[NSDate date]]; if(comResult == NSOrderedAscending) { [dateStr stringByReplacingOccurrencesOfString:curYear withString:nextYear]; [newBirthDates replaceObjectAtIndex:i withObject:dateStr]; } } NSLog(@"%@",newBirthDates); 

Это будет работать во всех сценариях …

Этот код сделает для вас:

 NSArray *[email protected][ @"03/12/2013", @"03/12/2013", @"08/13/1990", @"12/09/1989", @"02/02", @"09/08", @"03/02/1990", @"08/22/1989", @"03/02"]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [gregorian components:NSYearCalendarUnit fromDate:[NSDate date]]; NSInteger currentYear = [components year]; NSMutableArray *newBirthDates=[NSMutableArray new]; for(NSString *str in Birthdates){ NSArray *array=[str componentsSeparatedByString:@"/"]; if(array.count==2){ NSString *tempString=[NSString stringWithFormat:@"%@/%d",str,currentYear]; NSDateFormatter *dateFormatter=[NSDateFormatter new]; [dateFormatter setDateFormat:@"MM/dd/yyyy"]; NSDate *date=[dateFormatter dateFromString:tempString]; if ([[NSDate date] isGreaterThanOrEqualTo:date]) { NSLog(@"passed->%@ *** %@",date, str); [newBirthDates addObject:[NSString stringWithFormat:@"%@/%d",str,currentYear+1]]; } [newBirthDates addObject:tempString]; } else{ NSString *dateString=[NSString stringWithFormat:@"%@/%@/%d",array[0],array[1],currentYear]; NSDateFormatter *dateFormatter=[NSDateFormatter new]; [dateFormatter setDateFormat:@"MM/dd/yyyy"]; NSDate *date=[dateFormatter dateFromString:dateString]; if ([[NSDate date] isGreaterThanOrEqualTo:date]) { dateString=[NSString stringWithFormat:@"%@/%@/%d",array[0],array[1],currentYear+1]; } [newBirthDates addObject:dateString]; } } NSLog(@"%@",newBirthDates); 

Вот результат:

 DocumentBased[6632:303] ( "03/12/2014", "03/12/2014", "08/13/2013", "12/09/2013", "02/02/2014", "09/08/2013", "03/02/2014", "08/22/2013", "03/02/2014" ) 

Полагаю, вы знаете, как использовать NSDateFormatter для форматирования дат, чтобы изменить только год, просто проверьте эту ссылку NSDateComponents . Пожалуйста, ознакомьтесь с этим вопросом StackOverflow о том, как разделить дату на NSDateComponents.

Я думаю, вы можете проверить это напрямую, не используя dateFormatter.

Шаги: сначала найдите текущую дату с помощью NSDate.Convert в строку и сделайте формат таким же, как у вашего массива, используя NSDateFormatter.

Затем сравните один за другим, сделав условие. Отделите строку «/». if ([myArray objectAtIndex: i] строка отдельно по @ "/" objectAtIndex: 0) и проверить следующий … Сделать условие, как вы хотите

Я надеюсь, что если вы сделаете это с меньшим количеством строк кода, вы сможете достичь того, чего хотите.

  • iPhone - отмена операций в очереди GCD
  • Как включить масштабирование для двух разных UIScrollview в одном UIView?
  • Xcode - Масштаб шрифта от iPhone до размера iPad
  • CVOpenGLESTextureCacheCreateTextureFromImage не удалось выполнить для avcomposition
  • Есть ли способ защитить пароль от загрузки приложения mac из appstore?
  • Удалить MKnnotation из MapView
  • Приложение работает на iOS 6, но не работает на iOS 5
  • iOS навигационная панель меняется высота пейзаж против портрета
  • Изменение преобразования / вращения / масштаба UIVIEW без анимации
  • UTC TimeZone в Европе дает 2014 год вместо 2013 года
  • Как добавить контроллер таблеток в виде дочернего представления в родительский вид?
  • Давайте будем гением компьютера.