如何获得具有多个十进制数字的两个NSDates之间的年份差异

时间:2015-07-06 13:00:54

标签: ios objective-c

我从两个NSTimeInterval对象计算出NSDate。如何将此区间的年份值作为doubleCGFloat返回多个十进制数字?

让我们说,我有一个人的dob,我想把他的年龄改成像xx.xxxxxxxx岁那样的小数。

3 个答案:

答案 0 :(得分:2)

您需要使用NSCalendar。并与NSDate对象区别开来。这是一个例子:

// The time interval 
NSTimeInterval theTimeInterval = ...;

// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];

// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1]; 

// Get conversion to months, days, hours, minutes
NSCalendarUnit unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

NSDateComponents *breakdownInfo = [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];
NSLog(@"Break down: %i min : %i hours : %i days : %i months", [breakdownInfo minute], [breakdownInfo hour], [breakdownInfo day], [breakdownInfo month]);

答案 1 :(得分:1)

由于NSTimeInterval指定的秒数,所以你需要做的就是得到一个近似值 * 除以一年中的秒数:

#define SEC_PER_YEAR (365*24*60*60)
...
NSTimeInterval diff = ...
double diffYear = ((double)diff)/SEC_PER_YEAR;

* 这个数字不准确,因为每年的秒数会根据年份而变化。

答案 2 :(得分:1)

如果你只有时间间隔,那就太晚了。 365.5天通常超过一年,但有时他们不是。你不能从时间间隔告诉你。

日期很复杂。告诉我们完全你想要什么。