Obtenha o Unix Epoch Time em Swift


102

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


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

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

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)

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.