我有这个方法返回一个字符串。但秒值始终为零。我做错了什么?
-(NSString*)secondsBetweenDate:(NSDate*)startDate andDate:(NSDate*)endDate {
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *difference = [calendar components:unitFlags fromDate:startDate toDate:endDate options:0];
long hour = [difference hour];
long min = [difference minute];
long sec = [difference second];
NSLog(@"Hour: %ld Min: %ld Sec: %ld", hour, min, sec);
return [NSString stringWithFormat:@"%02ld:%02ld:%02ld", hour, min, sec];
}
答案 0 :(得分:0)
为什么不使用默认的NSDate差异计算? 返回NSTimeInterval,以秒为单位:
typedef double NSTimeInterval;描述用于指定时间 间隔,以秒为单位。
操作是:
[aDate timeIntervalSinceDate:anotherDate];
答案 1 :(得分:0)
您的代码是正确的。如果您使用其秒值实际不同的日期,则会产生预期结果。
[self secondsBetweenDate:[NSDate dateWithTimeIntervalSinceNow:-99999] andDate:[NSDate date]];
日志:
Hour: 27 Min: 46 Sec: 39
99999秒是27 * 60 * 60 + 46 * 60 +39
在我们的评论讨论中,我们发现你有更多的概念问题。如果您需要显示倒计时或秒表类型字符串,则必须使用当前时间作为日期参数之一。
因此,如果您想显示自特定日期(如秒表)后经过的时间,请使用:
NSDate *now = [NSDate date];
string = [self secondsBetweenDate:yourStartDate andDate:now];
如果您想显示特定日期(如倒计时)之前的时间,请使用:
NSDate *now = [NSDate date];
string = [self secondsBetweenDate:now andDate:yourEndDate];
顺便说一句:如果您只是针对iOS 8及更高版本,则可以使用NSDateComponentsFormatter
格式化日期
NSDateComponentsFormatter *df = [[NSDateComponentsFormatter alloc] init];
df.unitsStyle = NSDateComponentsFormatterUnitsStylePositional;
df.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSString *dateString = [df stringFromDate:startDate toDate:[NSDate date]];