Wie teile ich ein NSTimeInterval auf dem iPhone in Jahre, Monate, Tage, Stunden, Minuten und Sekunden auf?

Ich habe ein Zeitintervall, das sich über Jahre erstreckt, und ich möchte alle Zeitkomponenten von Jahr bis zu Sekunden.

Mein erster Gedanke ist, das Zeitintervall ganzzahlig durch Sekunden in einem Jahr zu dividieren, das von einer laufenden Summe von Sekunden zu subtrahieren, das von Sekunden in einem Monat zu dividieren, das von der laufenden Summe zu subtrahieren und so weiter.

Das scheint nur verworren zu sein, und ich habe gelesen, dass es wahrscheinlich eine eingebaute Methode gibt, wenn Sie etwas tun, das verworren aussieht.

Gibt es?

Ich habe die 2. Methode von Alex in meinen Code integriert.

Es ist in einer Methode von einem UIDatePicker in meiner Schnittstelle aufgerufen.

NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];

NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;

sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;

NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);

Wenn ich die Datumsauswahl auf ein Datum von 1 Jahr und 1 Tag in der Vergangenheit stelle, erhalte ich:

1 Jahre 1 Monate 1 Tage 16 Stunden 0 Minuten 20 Sekunden

Das ist 1 Monat und 16 Stunden frei. Wenn ich die Datumsauswahl auf 1 Tag in der Vergangenheit eingestellt habe, habe ich die gleiche Abweichung.

Aktualisieren: Ich habe eine App, die Ihr Alter in Jahren berechnet, wenn Sie Geburtstag haben (anhand eines UIDatePickers festgelegt), die jedoch häufig deaktiviert wurde. Das beweist, dass es eine Ungenauigkeit gab, aber ich kann nicht herausfinden, woher es kommt, oder?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage