2010-02-24 16 views
6

Ho un NSDate e una durata. Ho bisogno di ottenere il tempo dopo la durataCome aggiungere un intervallo di tempo a un NSDate?

Dato:
La data è "2010-02-24 00:30:00 -1000"
durata è di 3600 secondi

ho bisogno di ottenere "2010 -02-24 13:30:00 -1000 "

Ho pensato che dateWithTimeIntervalSinceReferenceDate:, avrebbe fatto il trucco, ma ora vedo che questo dà una data offset dal 1 ° gennaio 2001 GMT.

C'è un'altra funzione C Ho bisogno di utilizzare

risposta

31

Come afferma DyingCactus, è possibile utilizzare il metodo addTimeInterval di NSDate, ma a seconda della versione del sistema operativo verrà creato un avviso del compilatore, poiché è deprecato in 10.6 dal 2009-08-17.

L'attuale metodo consigliato è quello di utilizzare il dateByAddingTimeInterval NSDate:

NSDate *newDate = [oldDate dateByAddingTimeInterval:3600]; 

Si noti che se si prendono di mira 10.5 o versioni precedenti, la risposta originale funzionerà.

+0

Grazie a tutti quelli che hanno risposto. Non ho letto abbastanza bene i documenti su questo. – user278859

4

Si desidera che il metodo della classe dateWithTimeInterval:sinceDate: che prende la data di inizio e l'intervallo NSDate docs

+0

non riesco a trovare dateWithTimeInterval: sinceDate, ma ora che mi hai fatto guardo di nuovo io vedo initWithTimeInterval: sinceDate :. Questo ha fatto il trucco. Grazie. – user278859

+0

'dateWithTimeInterval: sinceDate' è un metodo di classe, piuttosto che un metodo di istanza, che restituisce il risultato come un NSDate autoreleased. Ci si abitua alle convenzioni di denominazione alla fine. – Abizern

+0

OK, vedo perché non vedo dateWithTimeIntervalSinceDate. Il tuo link è alla libreria di riferimento Mac OSX. Non è disponibile per l'iPhone. Ma come altri hanno sottolineato ci sono molti altri modi per farlo che sono disponibili su iPhone. – user278859

3

È possibile utilizzare il metodo di istanza addTimeInterval di NSDate:

NSDate *newDate = [oldDate addTimeInterval:3600]; 

Modifica: come correttamente indicato da Chip Coons, questo metodo è stato deprecato. Si prega di utilizzare uno degli altri metodi invece.

0

Invece di utilizzare il metodo addTimeInterval deprecato, è possibile utilizzare il metodo di istanza dataByAddingTimeInterval più recente di NSDate.

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

Per chi cerca una versione 3.x Swift:

let newDate = Date.init(timeInterval: 2600, since: oldDate) 
Problemi correlati