objective-c - 使用两个 NSDate 计算一个人的年龄

标签 objective-c cocoa time nsdate

我的代表一个人的类有一个方法来计算该人的年龄:

@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: 使用我已经设置的日期?

最佳答案

有几件事需要注意。首先,计算年龄的代码很好,只是我不明白为什么你返回 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 而不是参数来获取您之前设置的日期。

关于objective-c - 使用两个 NSDate 计算一个人的年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468515/

相关文章:

swift - NSImage.cgImage 中的 proposedRect 是什么意思(forProposedRect :context:hints:)?

cocoa - 使用解码数组创建 CGImage 时,输出的所有像素都会有少量偏移

iphone - 进度条不显示 iphone 中的逐步进度

objective-c - NSProgressIndicator 中的标签/文本?

ios - NSDateFormatter 没有返回正确的日期

mysql - 显示过去 30 天,即使它不在表中

python - 使用 Python 将字符串转换为格式化的日期时间字符串

c++ - 无需轮询即可更改时间

ios - NSDateComponentsFormatter future 时间 +1.998730003833771 结果为 "1 second"字符串

ios - FBSession requestNewPublishPermissions如何处理 "Skip"用户操作