Holen Sie sich Unix Epoch Time in Swift

102

Wie bekommt man die Sekunden aus der Epoche in Swift?

Chris Redford
quelle
2
Wie in Objective-C - verwenden Sie NSDate.
Gnasher729
2
Ich habe die Entwicklung von Apple-Produkten vermieden, weil ich Objective-C hasse. Folglich habe ich es nicht gelernt. Und ich weiß, dass die Swift-Syntax zumindest geringfügig anders ist. Zeigen Sie mir einfach die Syntax. Holen Sie sich einen einfachen SO-Ruf.
Chris Redford
3
Nein, es verweist direkt auf den Eintrag für die Swift-Methode : - timeIntervalSince1970.
Zaph
3
Eigentlich habe ich auf die spezifische Methode verlinkt :)
Martin R

Antworten:

162

Sie können einfach die timeIntervalSince1970Funktion von NSDate verwenden.

let timeInterval = NSDate().timeIntervalSince1970
Yannik
quelle
7
Beachten Sie, dass Foundation importiert werden muss.
AlBlue
3
Wie wäre es ohne Foundation?
Marius
3
Wenn Sie Foundation nicht verwenden möchten, können Sie AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) verwenden, um currentmillis.com zu laden und dann das HTML der Seite zu analysieren. Beachten Sie, dass Sie Netzwerkverzögerungen berücksichtigen und die Konnektivität überprüfen müssen. Ich entschied mich, nur Foundation zu verwenden ...
Chase Roberts
2
Wie wäre es als int?
Stapelhaus
82

Für Swift 3.0

Date().timeIntervalSince1970
Sumit Oberoi
quelle
2
Gut. Leute könnten auch interessiert sein an stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Matt Johnson-Pint
49
Das UNIX-Zeitformat ist Millisekunden. Also Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY
9
@ CHiP-love-NY: Das stimmt nicht. Die Unix-Zeit ist die Anzahl der Sekunden seit dem 1. Januar 1970, UTC.
Martin R
1
Es gibt ein TimeInterval zurück , das in Sekunden angegeben ist
Daniel
1

Sie können dies mit folgendem erhalten

Int(Date().timeIntervalSince1970)

Dies ist für das aktuelle Datum, wenn Sie für ein bestimmtes Datum erhalten möchten

Int(myDate.timeIntervalSince1970)

Wenn Sie von der UNIX-Zeitepoche zurück in die Swift Date-Zeit konvertieren möchten, können Sie Folgendes verwenden

let date = Date(timeIntervalSince1970: unixtEpochTime)
Mohammad Sadiq
quelle
0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

Swift's timeIntervalSince1970gibt Sekunden mit einer Genauigkeit von "Sub-Millisekunden" zurück, die normalerweise Mikrosekunden, manchmal aber auch eine Skala (eine Ziffer rechts von der Dezimalstelle) weniger oder mehr bedeutet. Wenn eine Skala von 5 (5 Stellen nach der Dezimalstelle) zurückgegeben wird, weiß ich nicht, ob Swift die nachfolgende 0 fallen lässt oder keine 6-Skalen mit Genauigkeit erzeugen kann. Wenn jedoch eine Skala von 7 zurückgegeben wird, kann diese zusätzliche Ziffer abgeschnitten werden, da sie über die Genauigkeit von Mikrosekunden hinausgeht. Für konsistente und präzise Werte:

let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise

Leider können im Jahr 2038 32-Bit-Zahlen für den Unix-Zeitstempel nicht verwendet werden, und sie müssen 64-Bit sein.

let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000

Eine Erweiterung:

extension Date {
    var unixTimestamp: Int64 {
        return Int64(self.timeIntervalSince1970 * 1_000)
    }
}

Date().unixTimestamp
bsod
quelle
0

Wenn Sie Foundation nicht importieren möchten, dh für Linux usw., können Sie Folgendes aus CoreFoundation verwenden:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970
rshev
quelle
Wissen Sie, wann Date und Freunde plattformübergreifend werden könnten?
Zoltán Matók
@ ZoltánMatók Ich habe gehört, dass sie Pläne haben, mehr von Foundation im Freien umzusetzen. Weitere Informationen finden Sie unter forums.swift.org.
Rshev