如何将年份更改为当年?

时间:2013-03-13 06:58:13

标签: iphone ios date calendar

我有一个类似下面的数组

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年,它也应该适用于未来。

4 个答案:

答案 0 :(得分:2)

此代码适用于您:

NSArray *Birthdates=@[
                      @"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"
)

答案 1 :(得分:1)

我知道如何使用NSDateFormatter格式化日期,单独更改年份,只需查看此链接NSDateComponents即可。请查看此StackOverflow question,了解如何将日期拆分为NSDateComponents。

答案 2 :(得分:1)

此代码与Anoop Vaidya代码相同,直到将所有dateStrings提取为一种格式。但是在Anoop代码中失败的日期比较逻辑在这里过度表现,即,当count == 2 ..

以下是我编辑的关于Anoop的代码

    NSArray *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"];

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);

这适用于所有场景......

答案 3 :(得分:0)

我认为您可以直接查看,而无需使用dateFormatter。

要做的步骤: 首先使用NSDate查找当前日期。将其转换为字符串,并使用NSDateFormatter使格式与您拥有的数组相同。

然后通过制定条件逐一比较。 用“/”分隔字符串。 if([myArray objectAtIndex:i]字符串由@“/”objectAtIndex:0分隔) 并检查下一个...... 根据需要制作条件

我希望如果您喜欢这样的代码,那么您可以实现您想要的代码。