Question

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setTimeZone:[ NSTimeZone timeZoneForSecondsFromGMT:(+0*3600) ] ] ;
[components setYear:2011];
[components setDay:13];
[components setMonth:5];
NSDate *date1 = [gregorianCalendar dateFromComponents:components];
NSDate *date2 = [[NSDate alloc] init];


    NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
    NSString *intervalString = [NSString stringWithFormat:@"%f", diff];
    int second = [intervalString intValue];
    int period = second/3600/24; 
    NSLog(@"period:%d", period);
    NSLog(@"date1:%@", data1);
    NSLog(@"date2:%@", data2);

Dans consol le résultat est:

2011-05-12 10:57:00.406 Projet[297:707] durée:0;

2011-05-12 10:57:00.375 Projet[297:707] data2:2011-05-12 08:56:52 +0000

2011-05-12 10:57:00.402 Projet[297:707] data1:2011-05-13 00:00:00 +0000

Je ne comprends pas pourquoi la période est "0", il doit être "1";Pouvez-vous m'aider?

Était-ce utile?

La solution

NstimeInterval n'est qu'un double, vous n'avez donc pas besoin de le convertir en une chaîne puis de retour à un int.

Que se passe-t-il si vous faites quelque chose comme ceci:

NSTimeInterval diff = [data2 timeIntervalSinceDate:date1];
int period = (int)diff/3600/24; 
NSLog(@"period:%d", period);

De plus, si l'intervalle est différent est inférieur à 3600 * 24, le résultat de DIFF / 3600/24 sera inférieur à 1, la valeur INT sera donc aplatie à 0.

Autres conseils

date2 est l' actuel date.Aucune idée de pourquoi period devrait être ici.

Au moment d'écrire ces lignes, la diff est d'environ.-53000.Le divisant, il apporte à zéro que vous obtenez et est prévu.

Aussi garder à l'esprit que NSTimeInterval est un nombre à virgule flottante, et la conversion à travers une chaîne de caractères en un nombre entier, qui va déposer les fractions.

Et il y a pas de point en faisant cela, la conversion à travers une chaîne de caractères - il suffit d'utiliser int seconds = (int) diff;.

Merci de copier/coller votre code directement, comme vous référer à data1et data2, mais vos variables sont appelées date1 et date2.Mais alors, c'est peut-être déjà un bug, si ces variables sont déclarées ailleurs.

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