web-dev-qa-db-fra.com

Comment convertir NSTimeInterval en int?

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.

34
Pradeep Reddy Kypa

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
62
Aaron Hayman

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!

8
Emil Vikström

Dans Swift 3.0

let timestamp = round(NSDate().timeIntervalSince1970)

enter image description here

7
AP_

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

MODIFIER:

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

6
Duncan C

Swift 4, Swift 5

Je jette simplement sur Int64:

Int64(Date().timeIntervalSince1970)
0
RaffAl