2010-02-24 15 views
6

Tengo NSDate y una duración. Necesito obtener el tiempo después de la duración¿Cómo agregar un intervalo de tiempo a un NSDate?

dado:
La fecha es "2010-02-24 12:30:00 -1000"
duración es de 3600 segundos

Necesito conseguir "2010 -02-24 13:30:00 -1000 "

Pensé que dateWithTimeIntervalSinceReferenceDate:, haría el truco pero ahora veo que esto da un desplazamiento de fecha del 1 de enero de 2001 GMT.

¿Hay alguna otra función C necesito utilizar

Respuesta

31

Como dice DyingCactus, puede usar el método addTimeInterval de NSDate, pero dependiendo de la versión del SO creará una advertencia de compilación, ya que está en desuso en 10.6 a partir de 2009-08-17.

El método actual recomendado es utilizar dateByAddingTimeInterval en NSDate:

NSDate *newDate = [oldDate dateByAddingTimeInterval:3600]; 

Tenga en cuenta que si se dirigen a 10,5 o más temprano, la respuesta original funcionará.

+0

Gracias a todos los que respondieron. No leí los documentos lo suficientemente bien en este caso. – user278859

4

Usted quiere que el método de la clase dateWithTimeInterval:sinceDate:, que lleva la fecha de inicio y el intervalo NSDate docs

+0

no puedo encontrar dateWithTimeInterval: sinceDate, pero ahora que me hizo mirar de nuevo me veo initWithTimeInterval: sinceDate :. Eso hizo el truco. Gracias. – user278859

+0

'dateWithTimeInterval: sinceDate' es un método de clase, en lugar de un método de instancia, que devuelve el resultado como un NSDate liberado automáticamente. Te acostumbras a las convenciones de nombres con el tiempo. – Abizern

+0

Bien, veo por qué no veo dateWithTimeIntervalSinceDate. Su enlace es a la biblioteca de referencia de Mac OSX. No está disponible para el iPhone. Pero, como han señalado otros, existen otras formas de hacerlo que están disponibles en el iPhone. – user278859

3

Se puede utilizar el método de instancia addTimeInterval de NSDate:

NSDate *newDate = [oldDate addTimeInterval:3600]; 

Editar: Como Chip Coons señala correctamente, este método ha quedado obsoleto. Por favor use uno de los otros métodos en su lugar.

0

En lugar de utilizar el método addTimeInterval en desuso, puede utilizar el método de instancia de NSDate dateByAddingTimeInterval más reciente.

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

Para aquellos que buscan una versión 3.x Swift:

let newDate = Date.init(timeInterval: 2600, since: oldDate) 
Cuestiones relacionadas