2010-02-24 18 views
6

Mam NSDate i czas trwania. Muszę uzyskać czas po upływie okresuJak dodać interwał czasowy do NSDate?

Dane:
data jest „2010-02-24 12:30:00 -1000”
czas trwania wynosi 3600 sek

muszę dostać „2010 -02-24 13:30:00 -1000 "

Myślałem, że dateWithTimeIntervalSinceReferenceDate:, zrobię lewę, ale teraz widzę, że to daje przesunięcie daty od 1 stycznia 2001 GMT.

Czy istnieje inna funkcja C muszę korzystać

Odpowiedz

31

Jak twierdzi DyingCactus, można użyć metody addTimeInterval w NSDate, ale w zależności od wersji systemu operacyjnego zostanie utworzone ostrzeżenie kompilatora, ponieważ jest ono nieaktualne w wersji 10.6 od 2009-08-17.

Obecna metoda zalecana jest użycie dateByAddingTimeInterval na NSDate:

NSDate *newDate = [oldDate dateByAddingTimeInterval:3600]; 

Zauważ, że jeśli są kierowane 10.5 lub wcześniej, oryginalny odpowiedź będzie działać.

+0

Dziękuję wszystkim, którzy odpowiedzieli. Nie przeczytałem dostatecznie dobrze dokumentów na ten temat. – user278859

4

Chcesz metoda klasy dateWithTimeInterval:sinceDate: która odbywa datę początkową i odstęp NSDate docs

+0

nie mogę znaleźć dateWithTimeInterval: sinceDate, ale teraz, kiedy mnie jeszcze raz ja widzę initWithTimeInterval: sinceDate :. To wystarczyło. Dzięki. – user278859

+0

'dateWithTimeInterval: sinceDate' jest metodą klasy, a nie metodą instancji, która zwraca wynik jako autoreleased NSDate. Ostatecznie przyzwyczaisz się do konwencji nazewnictwa. – Abizern

+0

OK, rozumiem, dlaczego nie widzę dateWithTimeIntervalSinceDate. Twój link jest do biblioteki referencyjnej Mac OSX. To nie jest dostępne dla iPhone'a. Jednak inni podkreślili, że jest jeszcze kilka innych sposobów na iPhone. – user278859

3

można użyć instancji metodę addTimeInterval z NSDate:

NSDate *newDate = [oldDate addTimeInterval:3600]; 

Edytuj: Jak poprawnie wskazuje Chip Coons, ta metoda została uznana za przestarzałą. Zamiast tego użyj jednej z pozostałych metod.

0

Zamiast korzystać z nieaktualnej metody addTimeInterval, można użyć nowszej metody instancji dateDataAddingTimeInterval dla NSDate.

NSDate *newDate = [oldDate dateByAddingTimeInterval:2500]; 
1

Dla tych, którzy szukają szybkiej wersji 3.x:

let newDate = Date.init(timeInterval: 2600, since: oldDate) 
Powiązane problemy