Question

Je rencontre des problèmes avec l'ajout de valeurs aux dates et aussi obtenir des différences entre les dates. Les dates et les composants calculés sont incorrects.

Donc, pour ajouter, si j'ajoute 1,5 mois, je ne reçois que 1 mois, si j'ajouter un nombre entier ie (1 ou 2 ou 3 et etc) il calcule correctement.

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];

Maintenant la différence, si j'ai une date qui a été ajouté avec exactement un an (code presque comme ci-dessus), il ajoute correctement, mais quand on calcule la différence, je reçois 0 ans, 11 mois et 30 jours.

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];

Qu'est-ce que je fais mal? Aussi j'ai ajouté le constanct kCFCalendarComponentsWrap dans les options pour les fonctions d'ajout et de différence, mais sans différence.

Merci

Était-ce utile?

La solution

  

Donc, pour ajouter, si j'ajoute 1,5 mois, je   seulement obtenir 1 mois, si j'ajouter une   ie nombre entier (1, 2 ou 3 et etc)   il calcule correctement.

La méthode de setMonth: en NSDateComponents prend une NSInteger, pas un nombre en virgule flottante. Ainsi, le comportement est correct, car il est tout simplement tronquer 1,5 à 1.

  

Maintenant la différence, si j'ai une date   qui a été ajouté avec exactement un   année (code presque comme ci-dessus), il   ajoute correctement, mais quand le   la différence est calculée, je reçois 0   ans, 11 mois et 30 jours.

Sauf si vous montrer le code de la façon dont vos variables date1 et date2 sont créés, il n'y a aucun moyen de dire.

(Vous fuite de mémoire également ci-dessus, toujours correspondre à une alloc avec un release / autorelease Et essayez de ne pas donner vos variables lettres capitales, car en tant que question de style, qui ne devrait être fait pour les noms de classe.)

Autres conseils

J'ai finalement trouvé le problème avec la différence de ce jour, quand je gardais un db, j'ai utilisé timeintervalsince1970 avec une valeur double, mais lors du remplissage et la mise à un datepicker, je travaillais avec un type de colonne int.

Merci Shaggy Frog pour moi diriger dans la bonne direction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top