2016-04-18 201 views
-1

請告訴我如何計算從谷歌距離矩陣api返回的時間間隔總和 - 例如,我得到2天15小時或5小時49分鐘或41分鐘的同學。那麼我怎麼總結所有的時間間隔。 請參閱我的回覆 -如何計算時間間隔之和

{ 
    "status": "OK", 
    "origin_addresses": [ "Vancouver, BC, Canada", "Seattle, État de Washington, États-Unis" ], 
    "destination_addresses": [ "San Francisco, Californie, États-Unis", "Victoria, BC, Canada" ], 
    "rows": [ { 
    "elements": [ { 
     "status": "OK", 
     "duration": { 
     "value": 340110, 
     "text": "3 jours 22 heures" 
     }, 
     "distance": { 
     "value": 1734542, 
     "text": "1 735 km" 
     } 
    }, { 
     "status": "OK", 
     "duration": { 
     "value": 24487, 
     "text": "6 heures 48 minutes" 
     }, 
     "distance": { 
     "value": 129324, 
     "text": "129 km" 
     } 
    } ] 
    }, { 
    "elements": [ { 
     "status": "OK", 
     "duration": { 
     "value": 288834, 
     "text": "3 jours 8 heures" 
     }, 
     "distance": { 
     "value": 1489604, 
     "text": "1 490 km" 
     } 
    }, { 
     "status": "OK", 
     "duration": { 
     "value": 14388, 
     "text": "4 heures 0 minutes" 
     }, 
     "distance": { 
     "value": 135822, 
     "text": "136 km" 
     } 
    } ] 
    } ] 
} 
+1

轉換爲通用單元並執行添加。 'NSTimeInterval'特別適合這項任務。 – Avi

+0

查看「日曆計算」下的Xcode文檔。有很多方法可以幫助你解決這個問題。 –

回答

3

從數據您發佈它看起來像服務器提供在文本格式,並作爲秒計數的時間差:(6小時48分是24480秒)

"value": 24487, 
    "text": "6 heures 48 minutes" 

以秒爲單位處理間隔比將時間間隔字符串轉換回數字時間間隔要容易得多。只需獲取「值」鍵的值並將這些值一起添加即可。 (這些值看起來是與字符串時間間隔相匹配的秒數。)

然後,您可以使用NSDateComponentsFormatter將時間間隔轉換回顯示字符串。

您也可以使用NSDateComponentsFormatter將您的時間間隔字符串轉換爲數字時間間隔,但您需要確保您的語言環境正確,然後您必須處理服務器的字符串格式與iOS版的。

-2

創建一個名爲previousTime的屬性。

@property (nonatomic, strong) NSDate *previousTime; 

使用此方法查找時間差。

- (NSTimeInterval)timeDifferenceSinceLastOpen 
{ 
    if (!previousTime) self.previousTime = [NSDate date]; 
    NSDate *currentTime = [NSDate date]; 
    NSTimeInterval timeDifference = [currentTime timeIntervalSinceDate:prevTime]; 
    self.prevTime = currentTime; 
    return timeDifference; 
} 

然後總結一下。 我希望它能幫助你。

+1

這並沒有解決OPs問題。 –

0

在這裏,您還可以使用簡單函數從Google距離矩陣API中獲取時間計算。

您也可以根據需要調整此方法。

- (NSString *)getTotalTimeFromGoogleDistanceAPI:(NSArray *)timeArray 
{ 
    double days = 0; 
    double hours = 0; 
    double mins = 0; 

    for (NSString *str in timeArray) { 

     // Split string into array to get values at index 
     NSArray *stringSplitterArray = [str componentsSeparatedByString:@" "]; 

     if ([str containsString:@"day"] && [str containsString:@"hour"]) { 

      days += [[stringSplitterArray objectAtIndex:0] integerValue]; 
      hours += [[stringSplitterArray objectAtIndex:2] integerValue]; 

     }else 
      if ([str containsString:@"hour"] && [str containsString:@"min"]) 
      { 
       hours += [[stringSplitterArray objectAtIndex:0] integerValue]; 
       mins += [[stringSplitterArray objectAtIndex:2] integerValue]; 
      } 
      else 
       { 
        mins += [[stringSplitterArray objectAtIndex:0] integerValue]; 
       } 
    } 

    // Check for hours -->> if its is greater than 24 then convert it into Day 
    if (hours > 23) { 
     double extractDay = floor(hours/24); 
     days += extractDay; 

     double extractHours = fmod(hours, 24); 
     hours = extractHours; 
    } 

    // Check for mins -->> if its is greater than 60 then convert it into Hours 
    if (mins > 59) { 
     double extractHours = floor(mins/60); 
     hours += extractHours; 

     double extractMins = fmod(mins, 60); 
     mins = extractMins; 
    } 

    // Calculate final time 
    NSString *timeString; 

    if (days == 0) { 
     timeString = [NSString stringWithFormat:@"%g hours %g mins", hours , mins]; 
    }else 
     if (days == 0 && hours == 0){ 
      timeString = [NSString stringWithFormat:@"%g mins", mins]; 
     }else 
      { 
       timeString = [NSString stringWithFormat:@"%g days %g hours %g mins", days, round(hours) , round(mins)]; 
      } 

    return timeString; 
} 

希望這可以幫助你。

相關問題