2013-07-15 18 views
10

Mam zmienną NSDate i chciałbym zmienić tylko czas (data nie powinna być zmieniona). Czy to możliwe ?Jak ustawić tylko czas w zmiennej NSDate?

Np data pick użytkownik przerwa w terminie DatePicker (jeśli jest to data rozpoczęcia Chciałbym ustawić czas jak 00:00:00, jeśli jest to data zakończenia, jak ustawić czas 23:59:59)

Dziękuję wszystkim za pomoc.

Pozdrawiam, Alex.

+1

Nie możesz. Obiekt NSDate zawiera pojedynczą wartość, która jest w zasadzie liczbą milisekund od daty odniesienia. Możesz jednak używać NSCalendar i NSDateComponents do manipulowania poszczególnymi komponentami * tak, jakby * były niezależne. –

Odpowiedz

30

Będziesz chciał użyć NSDateComponents.

NSDate *oldDate = datePicker.date; // Or however you get it. 
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *comps = [calendar components:unitFlags fromDate:oldDate]; 
comps.hour = 23; 
comps.minute = 59; 
comps.second = 59; 
NSDate *newDate = [calendar dateFromComponents:comps]; 
+0

Oczywiście trzeba uważać na strefy czasowe. –

+0

Jak ustawić strefę czasową? – LIAL

+0

Myślę, że to rozwiązanie, ale godziny nie zostały ustawione, tylko minuty i sekundy zostały ustawione jako 59:59. Naprawdę trzeba ustawić strefę czasową. Czy mogę uzyskać strefę czasową z NSDate (w tym przykładzie ze zmiennej oldDate? – LIAL

4

Obiekt NSDate nie może zostać zmieniony.

Można utworzyć z niego nowy obiekt NSDate. Spójrz na metodę - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds.

NSDate *newDate = [endDate dateByAddingTimeInterval:24.0f * 60.0f * 60.0f - 1.0f]; 
0

Gdy potrzebuję tylko śledzić czas, nie używam NSDate ani NSTimeInterval. Zamiast tego używam NSintegera i przechowuję czas "wojskowy", tj. 0830 = 8:30, 14:15 = 14:15.

Powiązane problemy