Comment convertir NSTimeInterval en une valeur entière?
My TimeInterval contient la valeur 83.01837
. Je dois le convertir en 83
. J'ai googlé mais je n'ai pas pu trouver d'aide.
Affectation directe:
NSTimeInterval interval = 1002343.5432542;
NSInteger time = interval;
//time is now equal to 1002343
NSTimeInterval est un double, donc si vous l'assignez directement à un NSInteger (ou int, si vous le souhaitez) cela fonctionnera. Cela réduira le temps à la seconde près.
Si vous souhaitez arrondir à la seconde près (plutôt que de le couper), vous pouvez utiliser l'arrondi avant d'effectuer l'affectation:
NSTimeInterval interval = 1002343.5432542;
NSInteger time = round(interval);
//time is now equal to 1002344
Selon la documentation , NSTimeInterval
est juste un double
:
typedef double NSTimeInterval;
Vous pouvez convertir ceci en int
:
seconds = (int) myTimeInterval;
Attention cependant aux débordements!
Je soupçonne que les valeurs NSTimeInterval de NSDate débordent un NSInteger. Vous voudriez probablement un long long. (Entier 64 bits.) Ceux-ci peuvent stocker des valeurs entières de honking-big (-2 ^ 63 à 2 ^ 63 -1)
long long integerSeconds = round([NSDate timeIntervalSinceReferenceDate]);
Il ressemble à un NSInteger [[# # ~] peut [~ # ~] stocker un NSTimeInterval, au moins pour les deux prochaines décennies. La date actuelle, timeIntervalSinceReferenceDate, est d'environ 519 600 000, soit environ 2 ^ 28. Sur un périphérique 32 bits, et NSInteger peut contenir une valeur comprise entre -2 ^ 31 et 2 ^ 31-1. (2 ^ 31 est 2.147.483.648
Swift 4, Swift 5
Je jette simplement sur Int64
:
Int64(Date().timeIntervalSince1970)