2013-03-13 3 views
2

я один массив что-то вроде нижеКак изменить год на год до текущего года?

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 она уже прошла текущая дата плз помощь заранее спасибо :)

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

+0

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

+0

Привет, Десаи. Если вы хотите получить решение, то вам нужно будет выслать свой вопрос более точным. В настоящее время очень сложно узнать, что именно вы хотите. – Sawant

+0

@DesaiPrakash: Проверьте мой ответ, поскольку он является жанром для любого года. –

ответ

1

Этот код такой же, как и код Anoop Vaidya, до получения всей датыСтраницы в один формат. но Comparision логика дата, которая терпит неудачу в Anoop код над Comed здесь есть, когда счетчик == 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); 

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

+0

Вы действительно и инженер, скопируйте пасту прикосновением Мисс или г-н :) –

+0

@Anoop - Я ясно упомянул в своем ответе, что ваш ответ в порядке, чтобы сформировать строку даты, поэтому что только я взял это .. :-) –

+0

Спасибо за указание на ошибку, Obliged :) –

1

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

+0

нормально, спасибо, что ответили –

2

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

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" 
) 
+0

Этот код не работает, когда счетчик == 2. проверьте. –

+0

@Bhanu: причина, пожалуйста, чтобы я узнал –

+0

. В массиве Birthdates содержится элемент типа @ "02/06". С помощью этого кода в массиве newBirthDates будет элемент как @ "02/06/2013", но требуется один из них @ "02/06/2014" ... Pls проверяет мою логику для этого. –

0

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

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

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

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

Смежные вопросы