如何parsing和提取年,月,日等在iPhone IOS的​​时间间隔

我正在慢慢进入iOS开发,并试图从一个特定的date创build一个向上计时器。 我已经find了代码给了我几秒钟的时间间隔,但我不知道如何从中提取年/月/日/小时/分钟/秒的值,以便在自己的标签中显示每个值作为代码。

到目前为止,我已经知道,以下将给我两秒钟之间的时间间隔,我试图做的是parsing这个,并显示在我看来这是一个股票通过每秒更新UILabel使用NSTimer和调用每1秒select一次,在我的观点上得到这样的东西:

6年10个月13天18小时25分18秒(显然每个标签会随着时间的推移相应更新)

NSDate *startDate = [df dateFromString:@"2005-01-01"]; NSTimeInterval passed = [[NSDate date] timeIntervalSinceDate: startDate]; 

谢谢

使用两个date的NSCalendar:

 - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts 

作为使用指定组件的NSDateComponents对象返回两个提供的date之间的差异。

例:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"YYYY-MM-dd"]; NSDate *startingDate = [dateFormatter dateFromString:@"2005-01-01"]; NSDate *endingDate = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit; NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate toDate:endingDate options:0]; NSInteger days = [dateComponents day]; NSInteger months = [dateComponents month]; NSInteger years = [dateComponents year]; NSInteger hours = [dateComponents hour]; NSInteger minutes = [dateComponents minute]; NSInteger seconds = [dateComponents second]; NSLog(@"%dYears %dMonths %dDays %dHours %dMinutes %dSeconds", days, months, years, hours, minutes, seconds); 

NSLog输出:

 13Years 10Months 6Days 8Hours 6Minutes 7Seconds 

那么,“月”和“年”当然取决于哪一个月,哪一年(一年365或364天,一个月30或31天),你不能只抽出时间间隔几年和几个月 – 你总是得到一个完整的date,例如通过添加(修改)的时间间隔回到开始date,如

NSDate* newDate = [startDate dateByAddingTimeInterval:modifiedPassedTimeInterval];

从那天起,您可以使用NSDateComponents轻松地提取年份,月份等等:

 NSDateComponents* dateComponents = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:newDate]; NSInteger day = [dateComponents day]; NSInteger month = [dateComponents month]; NSInteger year = [dateComponents year];