Obtenga Unix Epoch Time en Swift


102

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


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

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

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)

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

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

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.