Jak uzyskać sekundy z epoki w Swift?
- timeIntervalSince1970
.
Jak uzyskać sekundy z epoki w Swift?
- timeIntervalSince1970
.
Odpowiedzi:
Możesz po prostu użyć timeIntervalSince1970
funkcji NSDate .
let timeInterval = NSDate().timeIntervalSince1970
Dla Swift 3.0
Date().timeIntervalSince1970
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)
1 second = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds
Swift timeIntervalSince1970
zwraca 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
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