Holen Sie sich Unix Epoch Time in Swift


102

Wie bekommt man die Sekunden aus der Epoche in Swift?


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

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

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)

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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.