如何从iphone IOS上的时间间隔解析并提取年,月,日等

时间:2011-11-14 11:51:14

标签: iphone ios ipad nsdate nstimer

我正在慢慢进入iOS开发并尝试从特定日期创建计数计时器。我已经找到了代码,它给出了我以秒为单位的间隔,但我无法弄清楚如何从中提取年/月/日/小时/分/秒值,以便将自己标签中的每个值显示为自动收报机。

到目前为止,我已经发现以下内容将以2秒为单位给出两个日期之间的间隔,我要做的是解析这个并通过每秒更新UILabel来显示我的视图作为自动收报机NSTimer并且每1秒调用一次选择器并在我的视图中得到类似的内容:

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

NSDate *startDate = [df dateFromString:@"2005-01-01"];

NSTimeInterval passed = [[NSDate date] timeIntervalSinceDate: startDate];

由于

2 个答案:

答案 0 :(得分:10)

将NSCalendar与两个日期一起使用:

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

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

示例:

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

答案 1 :(得分:2)

那么,“月”和“年”当然取决于哪个月和哪一年(一年365或364天?一个月30或31天?),你不能只花时间间隔和提取年和月 - 你总是得到一个完整的日期,例如将(修改的)时间间隔添加回开始日期,如

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];