Pobierz Unix Epoch Time w Swift


102

Jak uzyskać sekundy z epoki w Swift?


2
To samo co w Objective-C - użyj NSDate.
gnasher729

2
Unikałem tworzenia produktów Apple, ponieważ nienawidzę Objective-C. W związku z tym się tego nie nauczyłem. I wiem, że składnia Swift jest przynajmniej trochę inna. Pokaż mi tylko składnię. Zdobądź dobrą reputację SO.
Chris Redford,


3
Nie, to łączy się bezpośrednio do wejścia do sposobu Swift: - timeIntervalSince1970.
zaph

3
Właściwie połączyłem się z konkretną metodą :)
Martin R

Odpowiedzi:


162

Możesz po prostu użyć timeIntervalSince1970funkcji NSDate .

let timeInterval = NSDate().timeIntervalSince1970

7
Należy pamiętać, że należy zaimportować Foundation.
AlBlue

3
co powiesz na bez używania Foundation?
marius

3
Jeśli nie chcesz używać fundacji, możesz użyć AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ), aby załadować currentmillis.com, a następnie przeanalizować kod HTML strony. Pamiętaj, że musisz liczyć się z opóźnieniami w sieci i sprawdzić łączność. Postanowiłem po prostu użyć Foundation ...
Chase Roberts,

2
A może jako int?
rstackhouse


1

Możesz to uzyskać za pomocą następujących

Int(Date().timeIntervalSince1970)

To jest na aktualny termin, jeśli chcesz dostać się na dany termin

Int(myDate.timeIntervalSince1970)

Jeśli chcesz przekonwertować z powrotem z epoki czasu UNIX na czas Swift Date, możesz użyć następującego

let date = Date(timeIntervalSince1970: unixtEpochTime)

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

Swift timeIntervalSince1970zwraca sekundy z dokładnością udokumentowaną jako „poniżej milisekundy”, co, jak zauważyłem, oznacza zwykle mikrosekundy, ale czasami o jedną skalę (jedną cyfrę na prawo od przecinka) mniej lub więcej. Kiedy zwraca skalę 5 (5 cyfr po przecinku), nie wiem, czy Swift upuszcza końcowe 0, czy nie może wytworzyć 6 skal dokładności. Ale kiedy zwraca skalę 7, ta dodatkowa cyfra może zostać obcięta, ponieważ jest poza dokładnością do mikrosekundy. Dlatego dla spójnych i precyzyjnych wartości:

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

Niestety, w roku 2038 32-bitowe liczby nie będą nadawać się do użycia jako znacznik czasu Uniksa i będą musiały być 64-bitowe.

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

Rozszerzenie:

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

Date().unixTimestamp

0

Jeśli nie chcesz importować Foundation, tj. Do użytku z Linuksem itp., Możesz użyć następujących z CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

Czy wiesz, kiedy może się zdarzyć, że randki i przyjaciele staną się międzyplatformowe?
Zoltán Matók

@ ZoltánMatók Słyszałem, że mają plany ponownego wdrożenia większej liczby Fundacji na otwartej przestrzeni. Zajrzyj na forums.swift.org, aby uzyskać więcej informacji.
rshev
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.