Ottieni Unix Epoch Time in Swift


102

Come si ottengono i secondi dell'epoca in Swift?


2
Come in Objective-C: usa NSDate.
gnasher729

2
Ho evitato di sviluppare prodotti Apple perché odio Objective-C. Di conseguenza, non l'ho imparato. E so che la sintassi di Swift è almeno leggermente diversa. Mostrami solo la sintassi. Fatti una reputazione SO facile.
Chris Redford


3
No, si collega direttamente alla voce per il metodo di Swift: - timeIntervalSince1970.
Zaph il

3
In realtà mi sono collegato al metodo specifico :)
Martin R

Risposte:


162

Puoi semplicemente usare la timeIntervalSince1970funzione di NSDate .

let timeInterval = NSDate().timeIntervalSince1970

7
Tieni presente che è necessario importare Foundation.
AlBlue

3
che ne dici di senza usare Foundation?
marius

3
Se non si desidera utilizzare la base, è possibile utilizzare AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) per caricare currentmillis.com e quindi analizzare l'html della pagina. Tieni presente che devi tenere conto dei ritardi di rete e verificare la connettività. Ho deciso di usare solo Foundation ...
Chase Roberts

2
Che ne dici di un int?
rstackhouse


1

Puoi ottenerlo usando quanto segue

Int(Date().timeIntervalSince1970)

Questo è per la data corrente, se vuoi ottenere per una determinata data

Int(myDate.timeIntervalSince1970)

Se vuoi riconvertire da UNIX time epoch a Swift Date time, puoi usare quanto segue

let date = Date(timeIntervalSince1970: unixtEpochTime)

0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

Swift timeIntervalSince1970restituisce i secondi con quella che è documentata come precisione "sub-millisecondo", che ho osservato significare solitamente microsecondi ma a volte una scala (una cifra a destra del decimale) in meno o in più. Quando restituisce una scala di 5 (5 cifre dopo il decimale), non so se Swift stia lasciando cadere lo 0 finale o non potrebbe produrre 6 scale di precisione. Ma quando restituisce una scala di 7, quella cifra aggiuntiva può essere troncata perché è oltre la precisione del microsecondo. Pertanto, per valori coerenti e accurati:

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

Sfortunatamente, tuttavia, nell'anno 2038, i numeri a 32 bit non saranno utilizzabili per il timestamp Unix e dovranno essere a 64 bit.

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

Un'estensione:

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

Date().unixTimestamp

0

Se non si desidera importare Foundation, ad esempio per Linux, ecc., È possibile utilizzare quanto segue da CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

Sai quando le cose potrebbero diventare multipiattaforma Date e amici?
Zoltán Matók,

@ ZoltánMatók Ho sentito che hanno in programma di reimplementare ancora di più la Fondazione allo scoperto. Dai un'occhiata a forums.swift.org per maggiori informazioni.
rshev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.