2016-04-18 16 views
-1

Bitte sagen Sie mir, wie kann ich die Summe der Zeitintervalle Rückkehr von Google Entfernung Matrix API - für z. Ich bekomme 2 Tage 15 Stunden oder 5 Stunden 49 Minuten oder 41 Minuten Formate. Wie kann ich also alle Zeitintervalle zusammenfassen? Bitte beachten Sie meine Antwort -wie Summe der Zeitintervalle zu berechnen

{ 
    "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

In eine gemeinsame Einheit konvertieren und addieren. 'NSTimeInterval' ist für diese Aufgabe besonders geeignet. – Avi

+0

Schauen Sie in den Xcode-Dokumenten unter "kalendarische Berechnungen" nach. Es gibt einige Methoden, um Ihnen dabei zu helfen. –

Antwort

3

Aus den Daten geschrieben Sie es sieht aus wie der Server die Zeitdifferenzen sowohl in Textformat und als eine Anzahl von Sekunden sieht vor: (6 Std. 48 Minuten sind 24.480 Sekunden)

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

Der Umgang mit dem Intervall in Sekunden ist VIEL einfacher als zu versuchen, Zeitintervallstrings zurück in numerische Zeitintervalle zu konvertieren. Rufen Sie einfach den Wert des Schlüssels "Wert" ab und fügen Sie diese Werte zusammen hinzu. (Diese Werte scheinen die Anzahl der Sekunden zu sein, die dem Zeichenfolgenzeitintervall entsprechen.)

Sie können dann NSDateComponentsFormatter verwenden, um das Zeitintervall zurück in eine Anzeigezeichenfolge zu konvertieren.

Sie können auch NSDateComponentsFormatter verwenden, um Ihre Zeitintervall-Zeichenfolgen in numerische Zeitintervalle zu konvertieren. Sie müssen jedoch sicherstellen, dass das Gebietsschema korrekt ist. Dann müssen Sie mit den Unterschieden zwischen der String-Formatierung Ihres Servers und iOS.

-2

eine Eigenschaft erstellen namens previousTime.

@property (nonatomic, strong) NSDate *previousTime; 

Verwenden Sie diese Methode, um den Zeitunterschied zu finden.

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

Und summieren sich. Ich hoffe, es wird dir helfen.

+1

Das geht die OP-Frage überhaupt nicht an. –

0

Hier können Sie auch die einfache Funktion verwenden, um die Zeitberechnung von Google Distance Matrix API zu erhalten.

Sie können diese Methode auch nach Bedarf anpassen.

- (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; 
} 

Hoffe das hilft Ihnen. !!