2013-10-19 46 views
1
一个人的年龄

我代表一个人类有一个方法来计算人的年龄:计算使用两个NSDates

@interface Student : NSObject 

@property (strong) NSDate *dob; 

// This method will work out the person's age in calendar years 
- (NSDateComponents*)ageCalculation:(NSDate*)dob; 

下面是类实现文件

@implementation Student 

- (NSDateComponents*)ageCalculation:(NSDate*)dob { 
    NSDate *now = [NSDate date]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSCalendarUnit units = NSYearCalendarUnit | NSMonthCalendarUnit; 
    NSDateComponents *components = [calendar components:units 
               fromDate:dob 
               toDate:now 
               options:0]; 
    return components; 
} 

@end 

我不是不过,我确实是这样做的:

Student *student1 = [[Student alloc] init]; 
[student1 setDob:aDateOfBirth]; 
NSDateComponents *ageComponents = [student1 ageCalculation:aDateOfBirth]; 

该怎么处理这个方法的结果?我如何使ageCalculation:使用我已经设置的日期?

回答

5

有几件事情可以注意。首先,计算年龄的代码很好,除了我不明白为什么你会返回NSDateComponents而不是年龄。

这是我会怎么做

- (NSInteger)age { 
    NSDate *today = [NSDate date]; 
    NSDateComponents *ageComponents = [[NSCalendar currentCalendar] 
             components:NSYearCalendarUnit 
             fromDate:self.dob 
             toDate:today 
             options:0]; 
    return ageComponents.year; 
} 

你有兴趣只在year成分,所以不是返回它的NSDateComponents。使用self.dob而不是参数获取您之前设置的日期。

+0

非常感谢你根据你的建议调整了我的代码,现在它的工作很完美。我非常感谢你的帮助,因为我完全被困住了。我不知道简单的年龄计算可能会有多复杂,并且可以将它称为一种方法,因为日历和闰年的差异等原因,现在有意义的是它不会那么容易! – jon

+0

Gabriele,我正在编辑你非常透彻的答案,以使它在被用作[作为伪指针](http://stackoverflow.com/q/24248088)之后,不再局限于此用户的特定代码。我真诚地希望这不会得罪! –

+0

@JoshCaswell没有采取任何进攻。我同意答案和问题现在更普遍,谢谢你的努力。 ;) –

-1

刚刚创建了一个简单的方法,以字符串形式返回年数。

注意

  1. 它使用印度日历 - 改变它,如果ü希望。
  2. 致电NSString *yearsOldinString = [self getAge:dateOfBirth];,其中dateOfBirth表示以NSDate格式出生的人的出生日期。
+0

为什么在原始答案后2.5年后发布重复答案? – rmaddy

+0

同意原始答案完美!但我不认为这是重复的,因为它返回字符串中的答案。 NSDate和NSString是两个不同的东西 – iOSer

+0

如果唯一的区别是在完成相同的计算后将年数转换为字符串,那么我称它为重复。这个微不足道的差异当然不值得发布答案。特别是几年后的一个封闭的问题。 – rmaddy