iOS:problème avec NSDate et NSDateComponent
-
12-11-2019 - |
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?
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 à data1
et 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.