2013-07-15 8 views
10

Ho una variabile NSDate e desidero modificare solo il tempo (la data non deve essere modificata). È possibile ?Come posso impostare solo il tempo nella variabile NSDate?

Esempio: l'utente l'intervallo di date di prelievo in data DatePicker (Se è la data di inizio vorrei per impostare l'ora come 00:00:00, se è la data di fine, ho impostato il tempo di 23:59:59)

Grazie a tutti per il vostro aiuto.

Saluti, Alex.

+1

Non è possibile. L'oggetto NSDate contiene un singolo valore che è essenzialmente il numero di millisecondi dalla data di riferimento. Tuttavia, è possibile utilizzare NSCalendar e NSDateComponents per manipolare i singoli componenti * come se * fossero indipendenti. –

risposta

30

Si desidera utilizzare 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

Naturalmente, bisogna fare attenzione ai fusi orari. –

+0

Come posso impostare TimeZone? – LIAL

+0

Penso che questa sia una soluzione, ma Ore non impostate, solo minuti e secondi sono stati impostati come 59:59. È davvero necessario impostare il fuso orario. Posso ottenere il fuso orario da NSDate (in questo esempio dalla variabile oldDate? – LIAL

4

L'oggetto NSDate non può essere modificato.

È possibile creare un nuovo oggetto NSDate da esso. Dai uno sguardo al metodo - (id)dateByAddingTimeInterval:(NSTimeInterval)seconds.

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

Quando ho solo bisogno di tracciare il tempo, non uso NSDate o NSTimeInterval. Invece utilizzo un NSinteger e memorizzo il tempo "militare", ovvero 0830 = 8:30 AM, 14:15 = 14:15.

Problemi correlati