J'ai un intervalle de temps qui s'étend sur des années et je veux tous les composants de temps de l'année à quelques secondes. Ma première pensée est de diviser l'intervalle de temps par secondes dans une année, soustraire cela d'un total cumulé de secondes, diviser cela par secondes dans un mois, soustraire cela du total cumulé et ainsi de suite. Cela semble juste alambiqué et j'ai lu que lorsque vous faites quelque chose qui semble alambiquée, il y a probablement une méthode intégrée.Comment décomposer un NSTimeInterval en année, mois, jours, heures, minutes et secondes sur iPhone?
Y a-t-il?
J'ai intégré la 2ème méthode d'Alex dans mon code.
C'est dans une méthode appelée par un UIDatePicker dans mon interface.
NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;
sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;
NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);
Quand je mets le sélecteur de date à une date 1 an et 1 jour dans le passé, je reçois:
1 année 1 mois 1 jours 16 heures 0 minutes 20 secondes
qui est de 1 mois et 16 heures de repos. Si je définis le sélecteur de date sur 1 jour dans le passé, je suis absent du même montant.
Mise à jour: J'ai une application qui calcule votre âge en années, compte tenu de votre anniversaire (mis à partir d'un UIDatePicker), mais il était souvent éteint. Cela prouve qu'il y avait une inexactitude, mais je n'arrive pas à comprendre d'où ça vient, n'est-ce pas?
Si vous réglez le sélecteur de date il y a un jour, vous êtes hors d'un mois et seize heures ? –
oui, un mois et seize heures de repos. – willc2
Si le résultat est toujours un mois et seize heures d'inactivité, quelle que soit la valeur que vous choisissez, soit vous soustrayez cela des variables, soit vous changez, soit vous devez évaluer d'où vient cette erreur. Ma conjecture est que quelque chose ne va pas avec votre intervalle, si vous êtes toujours de ce montant. –