Domanda

Ho problemi con l'aggiunta di valori alle date e anche ottenere le differenze tra le date. non sono corrette Le date e le componenti calcolati.

Quindi, per l'aggiunta, se aggiungo 1,5 mesi, ho solo 1 mese, se aggiungo un numero intero cioè (1 o 2 o 3 ed ecc) calcola correttamente.

Float32 addAmount = 1.5;

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setMonth:addAmount];

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 [gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

 NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:Date1 options:0];

Ora, per differenza, se ho un appuntamento che è stato aggiunto con esattamente un anno (quasi lo stesso codice come sopra), si aggiunge in modo corretto, ma quando la differenza è computata, ottengo 0 anni, 11 mesi e 30 giorni.

NSDate *startDate = Date1;
NSDate *endDate = Date2;

NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
              fromDate:startDate
                toDate:endDate options:0];

NSInteger years = [components year];
NSInteger months = [components month];
NSInteger days = [components day];

Che cosa sto facendo di sbagliato? Inoltre ho aggiunto il constanct kCFCalendarComponentsWrap nelle opzioni per entrambe le funzioni l'aggiunta e la differenza, ma senza alcuna differenza.

Grazie

È stato utile?

Soluzione

  

Quindi, per l'aggiunta, se aggiungo 1,5 mesi, ho   solo ottenere 1 mese, se aggiungo qualsiasi   numero intero cioè (1 o 2 o 3 ed ecc)   calcola correttamente.

Il metodo setMonth: in NSDateComponents prende un NSInteger, non un numero decimale. Così il comportamento è corretto, in quanto è semplicemente troncando il 1,5-1.

  

Ora, per differenza, se ho un appuntamento   che è stato aggiunto con esattamente un   anno (quasi lo stesso codice come sopra),   aggiunge in modo corretto, ma quando il   differenza viene calcolata, ottengo 0   anni, 11 mesi e 30 giorni.

A meno che non si mostra il codice per come vengono create le variabili data1 e data2, non c'è nessun vero modo di dire.

(Sei anche che perde la memoria in precedenza; corrisponda sempre un alloc con un release / autorelease E cercare di non dare le variabili lettere maiuscole, poiché, come una questione di stile, che dovrebbe essere fatto solo per i nomi di classi.)

Altri suggerimenti

Ho finalmente trovato il problema con la differenza data, quando io stavo salvando ad un db, ho usato timeintervalsince1970 con una doppia valenza, ma quando ha popolato e impostarla a un datepicker, stavo usando un tipo int column.

Grazie Shaggy Frog per me sterzo nella direzione giusta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top