Mam przedział czasu, który obejmuje lata i chcę cały czas komponenty od roku do sekund.Jak rozbić NSTimeInterval na rok, miesiące, dni, godziny, minuty i sekundy na iPhonie?
Moja pierwsza myśl to liczba całkowita dzieląca przedział czasu przez sekundy w roku, odejmuj to od sumy sekund, podziel ją przez sekundy w miesiącu, odejmij od sumy całkowitej i tak dalej.
To wydaje się zawiłe i przeczytałem, że za każdym razem, gdy robisz coś, co wygląda na zawiłe, prawdopodobnie istnieje wbudowana metoda.
Czy jest?
Zintegrowałem drugą metodę Alexa z moim kodem.
Jest to metoda wywoływana przez UIDatePicker w moim interfejsie.
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);
Kiedy ustawić wyboru daty do daty 1 rok i 1 dzień w przeszłości, uzyskać:
1 rok 1 miesiąc 1 dni 16 godzin 0 minut 20 sekund
co oznacza 1 miesiąc i 16 godzin. Jeśli ustawię Selektor daty na 1 dzień w przeszłości, wyłączam o tę samą kwotę.
Aktualizacja: Mam aplikację, która obliczy wiek w latach, biorąc pod uwagę twoje urodziny (zestaw z UIDatePicker), ale to było często off. To dowodzi, że była nieścisłość, ale nie mogę ustalić, skąd ona pochodzi, prawda?
Jeśli ustawisz datę próbnika do jednego dnia temu, ruszasz przez jeden miesiąc i szesnaście godzin ? –
tak, jeden miesiąc i szesnaście godzin. – willc2
Jeśli wynik jest zawsze jednomiesięczny i szesnaście godzin wyłączony, niezależnie od wybranej wartości, odejmujesz ją od zmiennych, przesuwając lub musisz ocenić, skąd ten błąd pochodzi. Domyślam się, że coś jest nie tak z twoją przerwą, jeśli zawsze jesteś wyłączony przez tę kwotę. –