2016-08-24 80 views
0

计算经过充分友好的时候我试图创建一个计算的格式全部时间的方法:
0 Year 0 month 1 day 1 hour 15 minutes 5 seconds从两个NSDates

我传递了以下两个日期的例子。应该是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; 
} 

我已经看过了SO quiestions但theyu一切似乎只吐出了1个实例。即1天前,但不是剩余的完整字符串。

我在做什么错? 请不要使用外部的Github框架或CocoaPods。作为最people recommend不完成我想要的。

更新用户使用罗布NSDateComponentsFormatter

为了得到我想要这里的风格是未来使用的代码提示。在iOS 8+这只能

NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init]; 
    formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull; 
    formatter.allowedUnits = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
+2

一旦你有你的两个'NSDate'对象,使用'NSDateComponentsFormatter'建立您的字符串的时间已过去。 – Rob

+0

这不起作用。它吐出'剩下大约75分钟' –

+1

@Firemarble你需要正确配置NSDateComponentsFormatter来得到你想要的。 – rmaddy

回答

0

我觉得你的计算方法的实现应该是这样的:

- (NSString *)caluculateTimeFrom:(NSString*)startDate endDate:(NSString*)endDate 
{ 
    NSDateFormatter *formatter = [NSDateFormatter new]; 
    [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 

    NSDate *date1 = [formatter dateFromString:startDate]; 
    NSDate *date2 = [formatter dateFromString:endDate]; 

    NSTimeInterval interval = [date2 timeIntervalSinceDate:date1]; 

    NSCalendarUnit units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDateComponents *components = [calendar components:units 
               fromDate:[NSDate date]]; 
    [components setYear:1]; 
    [components setMonth:1]; 
    [components setDay:1]; 
    [components setHour:0]; 
    [components setMinute:0]; 
    [components setSecond:0]; 

    NSDate *zeroDate = [calendar dateFromComponents:components]; 
    NSDate *date = [NSDate dateWithTimeInterval:interval sinceDate:zeroDate]; 

    components = [calendar components:units 
          fromDate:date]; 
    NSString *result = [NSString stringWithFormat:@"%ld Year %ld month %ld day %ld hour %ld minutes %ld seconds", components.year - 1, 
         components.month - 1, 
         components.day - 1, 
         components.hour, 
         components.minute, 
         components.second]; 

    return result; 
} 
+0

您应该解释什么是错的,以及您的解决方案如何解决问题。仅有代码的答案在这里不受欢迎。 – rmaddy