2012-01-13 6 views
5

Voglio ottenere la differenza tra le date che saltano il tempo significa che se una data è 13 gen 2012 - 11 pm e altra data è 14 gen 2012 - 12 am, quindi la differenza dovrebbe essere 1 giorno e non 0 giorno. Voglio dire differenza tra data solo, 14 gennaio 2012 - 13 gennaio 2012, saltando il tempo. So di poter utilizzare NSDate api per calcolare la differenza, ma il problema è che consideri anche il tempo. Quindi ho pensato mentre calcola la differenza salterò il tempo ma non so come saltare il tempo perché se uso NSDateFormatter restituirò la stringa non data. Per favore aiutami cosa posso fare?Come saltare il tempo in NSDate?

Grazie in anticipo!

risposta

7

Quello che devi fare è ottenere prima il NSDateComponents di ogni data. Una volta fatto, puoi confrontare il componente "giorno" per ottenere la differenza.

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *date1 = ....; 
NSDate *date2 = ....; 
NSDateComponents *comps1 = [cal components:NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date1]; 
NSDateComponents *comps2 = [cal components:NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date2]; 

date1 = [cal dateFromComponents:comps1]; 
date2 = [cal dateFromComponents:comps2]; 

NSDateComponents *diffComps = [cal components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0]; 

NSLog(@"Days diff = %d", diffComps.day); 

La data API può essere un po 'strano per avvolgere la testa in giro, ma una volta che è abbastanza potente.

+0

E se c'è differenza in un anno o un mese? Era solo un esempio. –

+0

Risolto il problema per gestirlo. –

+0

Ci scusiamo per questa domanda ma non capisco davvero, cosa è "initWithCalendarIdentifier"? Cosa succede se viene modificato Calendar in ipad? –

Problemi correlati