【发布时间】:2016-08-24 18:06:14
【问题描述】:
我正在尝试创建一种以以下格式计算全时的方法:0 Year 0 month 1 day 1 hour 15 minutes 5 seconds
我将传递以下两个日期作为示例。应该是 1 小时 15 分 5 秒。
NSString * startDate = @"2016-08-24 10:00:00";
NSString * endDate = @"2016-08-24 11:15:05";
NSLog(@"Total Time: %@", [self caluculateTimeFrom:startDate endDate:endDate]);
计算方法
- (NSString*) caluculateTimeFrom:(NSString*)startDate endDate:(NSString*)endDate {
NSLog(@"Start Date: %@", startDate);
NSLog(@"End Date: %@", endDate);
if (startDate == nil || endDate == nil) {
return nil;
}
NSString * returnDate = @"";
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate * date1 = [dateFormater dateFromString:startDate];
NSDate * date2 = [dateFormater dateFromString:endDate];
float totalElapsedSeconds = roundf([date2 timeIntervalSinceDate:date1]);
NSLog(@"totalElapsedTime: %f", totalElapsedSeconds);
if (totalElapsedSeconds < SECOND ) {
returnDate = @"0 seconds";
return returnDate;
}
float days = totalElapsedSeconds / (60 * 60 * 24);
totalElapsedSeconds -= days * (60 * 60 * 24);
float hours = totalElapsedSeconds / (60 * 60);
totalElapsedSeconds -= hours * (60 * 60);
float minutes = totalElapsedSeconds / 60;
returnDate = [NSString stringWithFormat:@"%f days %f hours %f minutes", days, hours, minutes];
return returnDate;
}
我查看了一些问题,但他们似乎都只吐出 1 个实例。即 1 天前,但不是带有余数的完整字符串。
我做错了什么? 请不要使用外部 Github 框架或 CocoaPods。 因为大多数 people recommend 没有完成我想要的。
更新用户 Rob 建议使用 NSDateComponentsFormatter
为了得到我想要的样式,这里是供将来使用的代码。这仅适用于 iOS 8+
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
formatter.allowedUnits = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
【问题讨论】:
-
拥有两个
NSDate对象后,使用NSDateComponentsFormatter构建您的已用时间字符串。 -
那行不通。它吐出
About 75 minutes remaining -
@Firemarble 您需要正确配置
NSDateComponentsFormatter以获得您想要的。 -
用您实际获得的输出与您期望获得的输出更新您的问题。顺便说一句 - 您的日期格式化程序中的格式错误。年份使用
yyyy,而不是YYYY。 -
优秀。不过,我建议您删除该编辑,而是发布您的问题的答案。见Can I answer my own question?
标签: objective-c nsdate nsdateformatter nsdatecomponents