2011-11-10 12 views
5

Nella mia app, sto ricevendo una data e l'ora di inizio della stessa data e ora di fine. L'ora di fine potrebbe essere il momento del giorno successivo.NSData: aggiungere un giorno in base al tempo

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

Non ricevo la data di fine.

Come posso aggiungere un giorno alla data di inizio in base all'ora di fine. Ho rinviato molte risposte a SO, ma non sono riuscito a trovare la soluzione.

+0

la tua domanda non è chiara. Potete per favore specificare alcuni punti come dove lo state ottenendo e come volete cambiare la data. – Robin

+0

L'ho preso dal server usando il servizio web – Maulik

+0

Ciao, qual è la soluzione finale per questo. Quando non hai una data di fine. – MinuMaster

risposta

4

si dovrebbe utilizzare questa funzione

NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:86400]; 

qui 86400 è 60 (secondi) * 60 (minuti) * 24 (ore).
Se lo startDate non è dalla data corrente, è possibile utilizzare questo metodo

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

ora si stanno ottenendo in questo modo

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

modo da poter avere due date, rappresenta l'ora di inizio e di fine . Usa il seguente metodo per ottenere l'intervallo di tempo

- (NSTimeInterval)timeIntervalSince1970 

ora hai due intervalli di tempo per due date diverse, giusto? Ora semplicemente sottrai e otterrai quello che vuoi.

+0

come posso ottenere NSTimeInterval dalle 5:30 alle 4:40? come non ho la data di 4:30 del mattino ?? – Maulik

+0

per favore vedi la mia risposta modificata .. – Ankur

+0

Non ho due date .. solo una data con ora di inizio e ora di fine. Ora in base all'ora di fine, devo calcolare la data se l'ora di fine è per la stessa data o la prossima data. – Maulik

1

Metodo sporco (NO controllo DST): è più semplice se si converte tutto in unità comuni (ad esempio NSTimeInterval/doppio secondo). Controlla se l'ora di fine è inferiore all'ora di inizio (convertita in secondi da mezzanotte). Sottrai startSeconds da endSeconds, se il risultato è negativo aggiungi 24 ore di valore di secondi (24 * 60 * 60 = 86400). Aggiungi risultato alla data/ora di inizio.

2

risolto: in base alla risposta di 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]; 
    } 
Problemi correlati