Quelle est la meilleure façon d'obtenir les millisecondes actuelles du système?
226
[[NSDate date] timeIntervalSince1970];
Il renvoie le nombre de secondes depuis l'époque sous forme de double. Je suis presque sûr que vous pouvez accéder aux millisecondes à partir de la partie fractionnaire.
[NSDate timeIntervalSinceReferenceDate]
est moins cher. (Bien qu'il fasse référence à une "époque" différente - si vous voulez 1970, ajoutez la constanteNSTimeIntervalSince1970
.)Si vous envisagez d'utiliser ceci pour un timing relatif (par exemple pour les jeux ou l'animation), je préfère utiliser CACurrentMediaTime ()
Quelle est la voie recommandée;
NSDate
s'inspire de l'horloge de synchronisation en réseau et occasionnellement un hoquet lors de la resynchronisation avec le réseau.Il renvoie l'heure absolue actuelle, en secondes.
Si vous ne voulez que la partie décimale (souvent utilisée lors de la synchronisation des animations),
la source
J'ai comparé toutes les autres réponses sur un iPhone 4S et iPad 3 (versions de version).
CACurrentMediaTime
a le moins de frais généraux par une petite marge.timeIntervalSince1970
est beaucoup plus lent que les autres, probablement en raison de laNSDate
surcharge d'instanciation, bien que cela puisse ne pas avoir d'importance pour de nombreux cas d'utilisation.Je recommanderais
CACurrentMediaTime
si vous voulez le moins de frais généraux et que cela ne vous dérange pas d'ajouter la dépendance Quartz Framework. Ougettimeofday
si la portabilité est une priorité pour vous.iphone 4s
iPad 3
la source
NSTimeIntervalSince1970
macro qui est la plus rapide.NSTimeIntervalSince1970
est une constante décrivant les secondes entre 1970-01-01 et la "date de référence" (c.-à-d. 2001-01-01), elle est donc toujours égale à 978307200Dans Swift, nous pouvons créer une fonction et procéder comme suit
Bien que son beau travail à Swift 3.0 , mais nous pouvons modifier et utiliser la
Date
classe à la place deNSDate
dans 3.0Swift 3.0
la source
Jusqu'à présent, j'ai trouvé
gettimeofday
une bonne solution sur iOS (iPad), lorsque vous souhaitez effectuer une évaluation d'intervalle (par exemple, la fréquence d'images, le timing d'une image de rendu ...):la source
Pour obtenir des millisecondes pour la date actuelle.
Swift 4+:
la source
Swift 2
Swift 3
la source
TimeInterval
akaDouble
n'a pas de propriété en millisecondes.Date().timeIntervalSince1970 * 1000
Il peut être utile de connaître CodeTimestamps, qui fournit un wrapper autour des fonctions de synchronisation basées sur les machines. Cela vous donne des données de synchronisation de résolution en nanosecondes - 1000000x plus précises que les millisecondes. Oui, un million de fois plus précis. (Les préfixes sont milli, micro, nano, chacun 1000x plus précis que le précédent.) Même si vous n'avez pas besoin de CodeTimestamps, consultez le code (c'est open source) pour voir comment ils utilisent mach pour obtenir les données de synchronisation. Cela serait utile lorsque vous avez besoin de plus de précision et que vous souhaitez un appel de méthode plus rapide que l'approche NSDate.
http://eng.pulse.me/line-by-line-speed-analysis-for-ios-apps/
la source
-fno-objc-arc
si vous utilisez ARC :)la source
J'avais besoin d'un
NSNumber
objet contenant le résultat exact de[[NSDate date] timeIntervalSince1970]
. Étant donné que cette fonction a été appelée plusieurs fois et que je n'avais pas vraiment besoin de créer unNSDate
objet, les performances n'étaient pas excellentes.Donc, pour obtenir le format que la fonction d'origine me donnait, essayez ceci:
Ce qui devrait vous donner exactement le même résultat que
[[NSDate date] timeIntervalSince1970]
la source
CFAbsoluteTimeGetCurrent ()
la source
Essaye ça :
Dans cet exemple, dateWithTimeIntervalSince1970 est utilisé en combinaison du formateur @ "YYYY-MM-dd HH: mm: ss.SSS" qui renverra la date avec l'année, le mois, le jour et l'heure avec les heures, les minutes, les secondes et les millisecondes . Voir l'exemple: "2015-12-02 04: 43: 15.008". J'ai utilisé la NSString pour être sûr que le format sera écrit auparavant.
la source
Il s'agit essentiellement de la même réponse que celle publiée par @TristanLorach, juste recodée pour Swift 3:
la source
}
la source
C'est ce que j'ai utilisé pour Swift
utilisé ce site pour vérifier l'exactitude http://currentmillis.com/
la source
la source
[NSDate timeIntervalSinceReferenceDate]
est une autre option, si vous ne souhaitez pas inclure le framework Quartz. Il renvoie un double, représentant les secondes.la source
la source