Pobierz Unix Epoch Time w Swift

102

Jak uzyskać sekundy z epoki w Swift?

Chris Redford
źródło
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
Yannik
źródło
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
82

Dla Swift 3.0

Date().timeIntervalSince1970
Sumit Oberoi
źródło
2
Dobry. Również ludzie mogą być zainteresowani stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Matt Johnson-Pint
49
Format czasu UNIX jest podawany w milisekundach. So Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY
9
@ CHiP-love-NY: To nieprawda. Czas uniksowy to liczba sekund od 1 stycznia 1970 r. Czasu UTC.
Martin R
1
Zwraca TimeInterval , który jest w sekundach
Daniel,
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)
Mohammad Sadiq
źródło
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
bsod
źródło
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
rshev
źródło
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