1

我是 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
4

3 回答 3

2

不要用于NSDate进行相对日期计算。使用NSCalendarNSDateComponents

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *yearsComponents = [[NSDateComponents alloc] init];
yearsComponents.year = [_selectedDeathAge intValue];
NSDate *deathDate = [cal dateByAddingComponents:yearsComponents toDate:_selectedBirthDate];
于 2013-10-30T04:07:42.827 回答
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”的解决方案。这是此类计算的更好解决方案。

于 2013-10-30T04:09:51.940 回答
1

NSDate *deathDate = [_selectedBirthDate initWithTimeInterval:year * 365 * 24 * 60 * 60 sinceDate:_selectedBirthDate];

这条线是错误的,你应该期待奇怪的结果。您正在对已初始化的函数调用 init。您需要通过创建它[[NSDate alloc] initWithTimeInterval:sinceDate:],此外,您不应该像这样对时间间隔进行硬编码。抬头看NSDateComponents

于 2013-10-30T04:09:25.697 回答