2011-11-10 19 views
5

En mi aplicación, obtengo una fecha y hora de inicio de la misma fecha y hora de finalización. La hora del final podría ser el momento del día siguiente.NSDate: Agregar un día basado en el tiempo

example : Date : 11/01/2011 
      start time : 5:30 PM 
      end time : 4:30 AM (of next day morning) 

No recibo la fecha de finalización.

¿Cómo puedo agregar un día en la fecha de inicio según la hora de finalización? He referido muchas respuestas en SO, pero no pude encontrar la solución.

+0

su pregunta no es clara. ¿Puede especificar algunos puntos como dónde lo obtiene y cómo desea cambiar la fecha? – Robin

+0

Lo recibo del servidor usando el servicio web – Maulik

+0

Hola, ¿cuál es la solución final para esto? Cuando no tienes fecha de finalización – MinuMaster

Respuesta

4

se debe utilizar esta función

NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:86400]; 

aquí 86400 es de 60 (segundos) * (60 minutos) * (24 horas).
Si su startDate no es de fecha actual, puede utilizar este método

- (id)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)anotherDate 

ahora que está recibiendo como esto

example : Date : 11/01/2011 
      start time : 5:30 PM 
      end time : 4:30 AM (of next day morning) 

lo que puede tener dos fechas, representa la hora de inicio del tiempo y finales . Use el siguiente método para obtener el intervalo de tiempo

- (NSTimeInterval)timeIntervalSince1970 

ahora tiene dos intervalos de tiempo para dos fechas diferentes, ¿verdad? Ahora simplemente resta y obtendrás lo que deseas.

+0

¿cómo puedo obtener NSTimeInterval de 5:30 PM a 4:40 AM? ya que no tengo fecha de 4:30 AM ??? – Maulik

+0

por favor vea mi respuesta editada. – Ankur

+0

No tengo dos fechas ... solo una fecha con hora de inicio y hora de finalización. Ahora, en función de la hora de finalización, debo calcular la fecha de finalización para la misma fecha o la siguiente. – Maulik

1

Método Dirty (NO DST check): Es más fácil si convierte todo a unidades comunes (es decir, NSTimeInterval/double seconds). Verifique si la hora de finalización es menor que la hora de inicio (convertida a segundos desde la medianoche). Reste startSeconds de endSeconds, si el resultado es negativo, agregue 24 horas en segundos (24 * 60 * 60 = 86400). Agregue el resultado para comenzar la fecha/hora.

2

resuelto: de acuerdo a la respuesta del Akkis ...

NSDate *startDate = [df dateFromString:startingDateTime]; 
    NSDate *endDate = [df dateFromString:endingDateTime]; 

    NSComparisonResult result; 
    result = [startDate compare:endDate]; 

    if(result == NSOrderedDescending) 
    { 
     NSLog(@"newDate is greater"); 

     endDate = [endDate dateByAddingTimeInterval:60*60*24]; 
    } 
Cuestiones relacionadas