2013-03-13 134 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」,則將其轉換爲另一個數組,如「 2014" 年1月1日 bcoz它已經通過了當前的日期 plz幫助預先感謝您:)

,我會更喜歡做其中的代碼申請,不僅2013年和2014年的東西,應該申請來未來太。

+0

我們不考慮年份,我們應該只考慮日期和月份,然後檢查日期和月份是否已經過去了?如果通過或沒有通過,我們將按照我所提的問題 – 2013-03-13 07:04:56

+0

Hi Desai,如果你想得到解決方案,你需要發佈你的問題更準確。目前很難知道你想要什麼。 – Sawant 2013-03-13 07:06:23

+0

@DesaiPrakash:查看我的答案,因爲它是任何一年的genric。 – 2013-03-13 08:39:00

回答

1

此代碼與Anoop Vaidya代碼相同,可將所有dateStrings提取爲一種格式。但失敗在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

你是真正的工程師,複製粘貼與你的觸摸小姐或先生:) – 2013-03-13 09:09:43

+0

@Anoop - 我在我的答案中明確提到,你的答案是最好格式化日期字符串,所以只有我採取了.. :-) – 2013-03-13 09:18:16

+0

感謝您指出的錯誤,Obliged :) – 2013-03-13 09:22:04

1

我認爲你知道如何使用NSDateFormatter格式化日期,單獨更改年份,只需檢查此鏈接NSDateComponents。請查看此StackOverflow question關於如何將日期分成NSDateComponents。

+0

好吧,我謝謝你的回答 – 2013-03-13 07:06:16

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.請檢查。 – 2013-03-13 08:59:52

+0

@Bhanu:請原諒,這樣我纔會知道 – 2013-03-13 09:01:11

+0

生日數組包含@「02/06」這樣的元素。使用這段代碼newBirthDates數組的元素爲@「02/06/2013」​​,但需要一個@「02/06/2014」...請檢查我的邏輯。 – 2013-03-13 09:05:41

0

我認爲你可以直接檢查,而無需使用dateFormatter。

步驟: 首先使用NSDate查找當前日期。將其轉換爲字符串,並使用NSDateFormatter將格式設置爲與您擁有的數組相同。

接下來通過作出條件逐一比較。 用「/」分隔字符串。 如果([myArray的objectAtIndex:我]字符串單獨由@「/」 objectAtIndex:0) 和檢查下一個... 使病情,只要你想

我希望,如果你不喜歡這樣用更少代碼行可以實現你想要的。

相關問題