我是ios编程的新手。
我正试图通过以下代码获取死亡日期。 但是,我得到了意想不到的结果。
在下面的示例代码中,某人的出生日期为1899-12-31,此人的死亡年龄为80岁。
所以,我期待这个人的死亡日期是1979-12-31。 但是,我得到的结果是1843-11-05 08:31:44 +0000。
有人可以告诉我这段代码有什么问题吗?
谢谢!
NSInteger year = [_selectedDeathAge intValue];
NSLog(@"%d", year); //80
NSLog(@"%@", _selectedBirthDate);//(NSDate)1899-12-31 15:00:00 +0000
NSDate *deathDate = [_selectedBirthDate initWithTimeInterval:year * 365 * 24 * 60 * 60 sinceDate:_selectedBirthDate];
NSLog(@"%@", deathDate);//(NSDate)1843-11-05 08:31:44 +0000
答案 0 :(得分:2)
请勿使用NSDate
进行相对日期计算。使用NSCalendar
和NSDateComponents
:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *yearsComponents = [[NSDateComponents alloc] init];
yearsComponents.year = [_selectedDeathAge intValue];
NSDate *deathDate = [cal dateByAddingComponents:yearsComponents toDate:_selectedBirthDate];
答案 1 :(得分:2)
您不应该在另一个实例上调用initWithTimeInterval:sinceDate:
方法。
你应该这样做:
NSDate *deathDate = [_selectedBirthDate dateByAddingTimeInterval:year * 365 * 24 * 60 * 60];
或者你可以这样做:
NSDate *deathDate = [[NSDate alloc] initWithWithTimeInterval:year * 365 * 24 * 60 * 60 sinceDate:_selectedBirthDate];
但最后,你应该使用“Jacob Relkin”的解决方案。对于这种类型的计算,这是更好的解决方案。
答案 2 :(得分:1)
NSDate *deathDate = [_selectedBirthDate initWithTimeInterval:year * 365 * 24 * 60 * 60 sinceDate:_selectedBirthDate];
这一行是错误的,你应该期待奇怪的结果。您在已初始化的函数上调用init。您需要通过[[NSDate alloc] initWithTimeInterval:sinceDate:]
创建它,此外,您不应该像这样硬编码时间间隔。查看NSDateComponents
。