2010-02-24 7 views
6

Ich habe eine NSDate und eine Dauer. Ich brauche die Zeit nach der DauerWie fügt man einem NSDate ein Zeitintervall hinzu?

Gegeben zu erhalten:
Das Datum ist „2010-02-24 00.30.00 -1000“
Dauer 3600 Sekunden

ist ich brauche, um „2010 -02-24 13:30:00 -1000 "

Ich dachte dateWithTimeIntervalSinceReferenceDate:, würde den Trick tun, aber ich sehe jetzt, dass dies ein Datum Offset vom 1. Januar 2001 GMT gibt.

Gibt es eine andere C-Funktion I

Antwort

31

Wie DyingCactus angibt, können Sie die addTimeInterval-Methode von NSDate verwenden, aber abhängig von der Betriebssystemversion wird eine Compiler-Warnung erstellt, da sie in Version 10.6 ab dem 2009-08-17 veraltet ist.

Die derzeit empfohlene Methode ist dateByAddingTimeInterval auf NSDate zu verwenden:

NSDate *newDate = [oldDate dateByAddingTimeInterval:3600]; 

Beachten Sie, dass, wenn Sie 10.5 oder früher Targeting wird die ursprüngliche Antwort arbeiten.

+0

Danke an alle, die geantwortet haben. Ich habe die Dokumente nicht gut genug gelesen. – user278859

4

Sie wollen, dass die Klassenmethode dateWithTimeInterval:sinceDate: verwenden müssen, die das Startdatum und das Intervall NSDate docs

+0

Ich kann nicht finden dateWithTimeInterval: sinceDate, aber jetzt, dass du mich wieder gemacht sehe ich initWithTimeInterval sehen: sinceDate :. Das hat den Trick gemacht. Vielen Dank. – user278859

+0

'dateWithTimeInterval: sinceDate' ist eine Klassenmethode anstelle einer Instanzmethode, die das Ergebnis als automatisch freigegebenes NSDate zurückgibt. Sie gewöhnen sich schließlich an die Namenskonventionen. – Abizern

+0

OK, ich sehe, warum ich dateWithTimeIntervalSinceDate nicht sehe. Ihr Link verweist auf die Mac OSX-Referenzbibliothek. Es ist nicht für das iPhone verfügbar. Aber wie andere darauf hingewiesen haben gibt es mehrere andere Möglichkeiten, es zu tun, die auf dem iPhone verfügbar sind. – user278859

3

Sie nimmt die addTimeInterval Instanzmethode NSDate verwenden:

NSDate *newDate = [oldDate addTimeInterval:3600]; 

Edit: Wie Chip Coons richtig angibt, wurde diese Methode veraltet. Bitte verwenden Sie stattdessen eine der anderen Methoden.

0

Anstatt die veraltete addTimeInterval-Methode zu verwenden, können Sie die neuere dateByAddingTimeInterval-Instanzmethode von NSDate verwenden.

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

für die Suche nach einem Swift 3.x Version suchen:

let newDate = Date.init(timeInterval: 2600, since: oldDate) 
Verwandte Themen