2011-11-10 15 views
5

W mojej aplikacji otrzymuję datę i godzinę rozpoczęcia tej samej daty i godziny zakończenia. Czas końcowy może być czasem następnego dnia.NSDate: Dodaj dzień na podstawie czasu

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

Nie otrzymuję daty końcowej.

Jak dodać dzień do daty początkowej na podstawie czasu zakończenia. Odesłałem wiele odpowiedzi do SO, ale nie mogłem znaleźć rozwiązania.

+0

Twoje pytanie nie jest oczywista. Czy możesz podać niektóre punkty, takie jak miejsce, w którym się znajdujesz i jak chcesz zmienić datę. – Robin

+0

Dostaję go z serwera za pomocą usługi internetowej – Maulik

+0

Witam, jakie jest ostateczne rozwiązanie tego. Kiedy nie masz daty zakończenia. – MinuMaster

Odpowiedz

4

należy użyć tej funkcji

NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:86400]; 

tutaj 86400 60 (sekund) * 60 (minut) * 24 (w godzinach).
Jeśli startDate nie jest od aktualnej daty, a następnie można użyć tej metody

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

teraz otrzymujesz jak ten

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

więc można mieć dwie daty, reprezentuje czas rozpoczęcia i zakończenia czasu . Użyj poniższej metody, aby uzyskać przedział czasu

- (NSTimeInterval)timeIntervalSince1970 

Masz teraz dwa przedziały czasowe dla dwóch różnych dat, prawda? Teraz po prostu odejmij to, a dostaniesz to, czego chcesz.

+0

jak mogę uzyskać NSTimeInterval od 5:30 PM do 4:40 AM? ponieważ nie mam daty 4:30 rano ??? – Maulik

+0

zobacz moją zredagowaną odpowiedź .. – Ankur

+0

Nie mam dwóch dat .. tylko jedna data z czasem rozpoczęcia i godzina zakończenia. Teraz, w oparciu o czas zakończenia, muszę obliczyć datę, czy czas zakończenia dotyczy tej samej daty lub następnej daty. – Maulik

1

Metoda Dirty (BEZ DST): Łatwiej jest przekonwertować wszystko na zwykłe jednostki (np. NSTimeInterval/podwójne sekundy). Sprawdź, czy czas zakończenia jest krótszy niż czas rozpoczęcia (przeliczony na sekundy od północy). Odejmij startSeconds od endSeconds, jeśli wynik jest ujemny dodaj 24 godziny wartości sekund (24 * 60 * 60 = 86400). Dodaj wynik do daty/czasu rozpoczęcia.

2

rozwiązany: w zależności od odpowiedzi Akkis za ...

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]; 
    } 
Powiązane problemy