Obtenga Unix Epoch Time en Swift

102

¿Cómo se obtienen los segundos de la época en Swift?

Chris Redford
fuente
2
Igual que en Objective-C: use NSDate.
gnasher729
2
He evitado desarrollar productos Apple porque odio Objective-C. En consecuencia, no lo he aprendido. Y sé que la sintaxis de Swift es al menos ligeramente diferente. Enséñame la sintaxis. Consiga una reputación de SO fácil.
Chris Redford
3
No, se vincula directamente a la entrada para el método rápido: - timeIntervalSince1970.
zaph
3
De hecho, me vinculé al método específico :)
Martin R

Respuestas:

162

Simplemente puede usar la timeIntervalSince1970función de NSDate .

let timeInterval = NSDate().timeIntervalSince1970
Yannik
fuente
7
Tenga en cuenta que esto debe tener Foundation importado.
AlBlue
3
¿Qué tal sin usar Foundation?
marius
3
Si no desea usar la base, puede usar AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) para cargar currentmillis.com y luego analizar el html de la página. Tenga en cuenta que debe tener en cuenta los retrasos en la red y verificar la conectividad. Decidí usar Foundation ...
Chase Roberts
2
¿Qué tal como int?
rstackhouse
82

Para Swift 3.0

Date().timeIntervalSince1970
Sumit Oberoi
fuente
2
Buena. Además, la gente puede estar interesada en stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Matt Johnson-Pint
49
El formato de hora de UNIX está en milisegundos. So Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY
9
@ CHiP-love-NY: Eso no es cierto. La hora Unix es el número de segundos desde el 1 de enero de 1970, UTC.
Martin R
1
Devuelve un TimeInterval , que está en segundos
Daniel
1

Puedes conseguirlo usando lo siguiente

Int(Date().timeIntervalSince1970)

Esto es para la fecha actual, si desea obtener para una fecha determinada

Int(myDate.timeIntervalSince1970)

Si desea volver a convertir de la época de UNIX a la hora de Swift Date, puede usar lo siguiente

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

Swift timeIntervalSince1970devuelve segundos con lo que se documenta como una precisión de "submilisegundos", que he observado que significa generalmente microsegundos, pero a veces una escala (un dígito a la derecha del decimal) menos o más. Cuando devuelve una escala de 5 (5 dígitos después del decimal), no sé si Swift está eliminando el 0 final o no puede producir 6 escalas de precisión. Pero cuando devuelve una escala de 7, ese dígito adicional se puede truncar porque está más allá de la precisión de microsegundos. Por lo tanto, para valores consistentes y verdaderos con precisión:

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

Desafortunadamente, sin embargo, en el año 2038, los números de 32 bits no se podrán utilizar para la marca de tiempo de Unix y tendrán que ser de 64 bits.

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

Una extensión:

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

Date().unixTimestamp
bsod
fuente
0

Si no desea importar Foundation, es decir, para uso de Linux, etc., puede utilizar lo siguiente de CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970
rshev
fuente
¿Sabes cuándo las cosas podrían convertirse en multiplataforma Date and friends?
Zoltán Matók
@ ZoltánMatók He escuchado que tienen planes para reimplementar más de la Fundación al aire libre. Eche un vistazo a forums.swift.org para obtener más información.
rshev