Was ist der beste Weg, um die aktuelle Systemzeit Millisekunden zu erhalten?
224
[[NSDate date] timeIntervalSince1970];
Es gibt die Anzahl der Sekunden seit der Epoche als Doppel zurück. Ich bin mir fast sicher, dass Sie vom Bruchteil aus auf die Millisekunden zugreifen können.
[NSDate timeIntervalSinceReferenceDate]
ist günstiger. (Obwohl es auf eine andere "Epoche" verweist - wenn Sie 1970 wollen, fügen Sie die Konstante hinzuNSTimeIntervalSince1970
.)Wenn Sie dies für das relative Timing verwenden möchten ( zum Beispiel für Spiele oder Animationen), würde ich lieber CACurrentMediaTime () verwenden.
Welches ist der empfohlene Weg;
NSDate
Zieht von der vernetzten Synchronisierungsuhr und schluckt gelegentlich, wenn sie erneut mit dem Netzwerk synchronisiert wird.Es gibt die aktuelle absolute Zeit in Sekunden zurück.
Wenn Sie nur den Dezimalteil möchten (häufig beim Synchronisieren von Animationen verwendet),
quelle
Ich habe alle anderen Antworten auf einem iPhone 4S und iPad 3 (Release Builds) verglichen.
CACurrentMediaTime
hat mit geringem Abstand den geringsten Overhead.timeIntervalSince1970
ist weitaus langsamer als die anderen, wahrscheinlich aufgrund desNSDate
Instanziierungsaufwands, obwohl dies für viele Anwendungsfälle möglicherweise keine Rolle spielt.Ich würde empfehlen,
CACurrentMediaTime
wenn Sie den geringsten Overhead wünschen und die Quartz Framework-Abhängigkeit nicht hinzufügen möchten. Odergettimeofday
wenn Portabilität für Sie Priorität hat.iPhone 4s
iPad 3
quelle
NSTimeIntervalSince1970
Makro, das am schnellsten ist.NSTimeIntervalSince1970
ist eine Konstante, die die Sekunden zwischen dem 01.01.1970 und dem "Referenzdatum" (dh 01.01.2001) beschreibt. Sie ist also immer gleich 978307200In Swift können wir eine Funktion erstellen und wie folgt vorgehen
Obwohl seine adaequat in Swift 3.0 , aber wir können das ändern und verwenden
Date
Klasse stattNSDate
in 3,0Swift 3.0
quelle
Bisher habe ich
gettimeofday
eine gute Lösung für iOS (iPad) gefunden, wenn Sie eine Intervallauswertung durchführen möchten (z. B. Framerate, Timing eines Rendering-Frames ...):quelle
Um Millisekunden für das aktuelle Datum zu erhalten.
Swift 4+:
quelle
Swift 2
Swift 3
quelle
TimeInterval
akaDouble
hat keine Millisekunden-Eigenschaft.Date().timeIntervalSince1970 * 1000
Es kann nützlich sein, sich mit CodeTimestamps vertraut zu machen, die einen Wrapper für machbasierte Timing-Funktionen bieten. Auf diese Weise erhalten Sie Zeitdaten mit einer Auflösung von Nanosekunden - 1000000x genauer als Millisekunden. Ja, millionenfach genauer. (Die Präfixe sind Milli, Micro, Nano, jeweils 1000x genauer als die letzten.) Auch wenn Sie keine CodeTimestamps benötigen, lesen Sie den Code (Open Source), um zu sehen, wie sie mach verwenden, um die Timing-Daten abzurufen. Dies ist nützlich, wenn Sie mehr Präzision benötigen und einen schnelleren Methodenaufruf als den NSDate-Ansatz wünschen.
http://eng.pulse.me/line-by-line-speed-analysis-for-ios-apps/
quelle
-fno-objc-arc
wenn Sie ARC verwenden :)quelle
Ich brauchte ein
NSNumber
Objekt mit dem genauen Ergebnis von[[NSDate date] timeIntervalSince1970]
. Da diese Funktion viele Male aufgerufen wurde und ich keinNSDate
Objekt erstellen musste , war die Leistung nicht besonders gut.Versuchen Sie Folgendes, um das Format zu erhalten, das mir die ursprüngliche Funktion gegeben hat:
Welches sollte Ihnen genau das gleiche Ergebnis geben wie
[[NSDate date] timeIntervalSince1970]
quelle
CFAbsoluteTimeGetCurrent ()
quelle
Versuche dies :
In diesem Beispiel wird dateWithTimeIntervalSince1970 in Kombination mit dem Formatierer @ "JJJJ-MM-TT HH: mm: ss.SSS" verwendet, der das Datum mit Jahr, Monat, Tag und die Uhrzeit mit Stunden, Minuten, Sekunden und Millisekunden zurückgibt . Siehe das Beispiel: "2015-12-02 04: 43: 15.008". Ich habe den NSString verwendet, um sicherzustellen, dass das Format zuvor geschrieben wurde.
quelle
Dies ist im Grunde die gleiche Antwort wie bei @TristanLorach, die gerade für Swift 3 neu codiert wurde:
quelle
}}
quelle
Das habe ich für Swift verwendet
hat diese Website verwendet, um die Richtigkeit zu überprüfen http://currentmillis.com/
quelle
quelle
[NSDate timeIntervalSinceReferenceDate]
ist eine weitere Option, wenn Sie das Quartz-Framework nicht einschließen möchten. Es wird ein Double zurückgegeben, das Sekunden darstellt.quelle
quelle