Obtenha o Unix Epoch Time em Swift

102

Como você obtém os segundos da época em Swift?

Chris Redford
fonte
2
O mesmo que em Objective-C - use NSDate.
gnasher729
2
Evitei desenvolver produtos Apple porque odeio Objective-C. Conseqüentemente, eu não aprendi. E eu sei que a sintaxe do Swift é pelo menos um pouco diferente. Apenas me mostre a sintaxe. Arranja alguma reputação de SO fácil.
Chris Redford
3
Não, ele liga diretamente à entrada para o método Swift: - timeIntervalSince1970.
zaph
3
Na verdade vinculei ao método específico :)
Martin R

Respostas:

162

Você pode simplesmente usar a timeIntervalSince1970função NSDate .

let timeInterval = NSDate().timeIntervalSince1970
Yannik
fonte
7
Observe que é necessário importar o Foundation.
AlBlue
3
que tal sem usar o Foundation?
marius
3
Se não quiser usar o Foundation, você pode usar AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) para carregar currentmillis.com e, em seguida, analisar o html da página. Observe que você deve considerar os atrasos de rede e verificar a conectividade. Decidi usar apenas o Foundation ...
Chase Roberts
2
Que tal como um int?
rstackhouse
82

Para Swift 3.0

Date().timeIntervalSince1970
Sumit Oberoi
fonte
2
Um bom. Além disso, as pessoas podem estar interessadas em stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Matt Johnson-Pint
49
O formato de hora UNIX é com milissegundos. So Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY
9
@ CHiP-love-NY: Isso não é verdade. A hora Unix é o número de segundos desde 1º de janeiro de 1970, UTC.
Martin R
1
Ele retorna um TimeInterval , que está em segundos
Daniel
1

Você pode conseguir isso usando o seguinte

Int(Date().timeIntervalSince1970)

Isto é para a data atual, se você quiser obter para uma determinada data

Int(myDate.timeIntervalSince1970)

Se você deseja converter de volta da época do tempo UNIX para a hora Swift Date, você pode usar o seguinte

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

O Swift timeIntervalSince1970retorna segundos com o que está documentado como precisão de "submilissegundos", que eu observei significar geralmente microssegundos, mas às vezes uma escala (um dígito à direita do decimal) a menos ou mais. Quando retorna uma escala de 5 (5 dígitos após o decimal), não sei se o Swift está descartando o 0 final ou não conseguiu produzir 6 escalas de precisão. Mas quando retorna uma escala de 7, aquele dígito extra pode ser truncado porque está além da precisão de microssegundos. Portanto, para valores consistentes e verdadeiros de precisão:

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

Infelizmente, no entanto, no ano de 2038, os números de 32 bits não serão utilizáveis ​​para o carimbo de data / hora Unix e terão que ser de 64 bits.

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

Uma extensão:

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

Date().unixTimestamp
bsod
fonte
0

Se você não quiser importar o Foundation, ou seja, para uso em Linux etc., você pode usar o seguinte do CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970
rshev
fonte
Você sabe quando as coisas podem namorar e amigos se tornarem plataformas cruzadas?
Zoltán Matók
@ ZoltánMatók Ouvi dizer que eles têm planos de reimplementar mais a Fundação abertamente. Dê uma olhada em forums.swift.org para mais informações.
rshev