Dapatkan Unix Epoch Time di Swift

102

Bagaimana Anda mendapatkan detik dari epoch di Swift?

Chris Redford
sumber
2
Sama seperti di Objective-C - gunakan NSDate.
gnasher729
2
Saya menghindari pengembangan produk Apple karena saya benci Objective-C. Akibatnya, saya belum mempelajarinya. Dan saya tahu bahwa sintaks Swift setidaknya sedikit berbeda. Tunjukkan saja sintaksnya. Dapatkan reputasi SO yang mudah untuk diri Anda sendiri.
Chris Redford
3
Tidak, itu link langsung ke entri untuk metode Swift: - timeIntervalSince1970.
zaph
3
Sebenarnya saya ditautkan ke metode tertentu :)
Martin R

Jawaban:

162

Anda cukup menggunakan timeIntervalSince1970fungsi NSDate .

let timeInterval = NSDate().timeIntervalSince1970
Yannik
sumber
7
Perhatikan ini harus memiliki Foundation yang diimpor.
AlBlue
3
bagaimana kalau tanpa menggunakan Foundation?
marius
3
Jika Anda tidak ingin menggunakan foundation, Anda dapat menggunakan AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) untuk memuat currentmillis.com dan kemudian mengurai html halaman. Perhatikan bahwa Anda harus memperhitungkan penundaan jaringan dan memeriksa konektivitas. Saya memutuskan untuk hanya menggunakan Foundation ...
Chase Roberts
2
Bagaimana sebagai seorang int?
rstackhouse
82

Untuk Swift 3.0

Date().timeIntervalSince1970
Sumit Oberoi
sumber
2
Bagus. Selain itu, orang-orang mungkin tertarik dengan stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Matt Johnson-Pint
49
Format waktu UNIX adalah dengan milidetik. So Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY
9
@ CHiP-love-NY: Itu tidak benar. Waktu Unix adalah jumlah detik sejak 1 Januari 1970, UTC.
Martin R
1
Ini mengembalikan TimeInterval , yang ada di detik
Daniel
1

Anda bisa mendapatkannya dengan mengikuti

Int(Date().timeIntervalSince1970)

Ini untuk tanggal sekarang, jika Anda ingin mendapatkan untuk tanggal tertentu

Int(myDate.timeIntervalSince1970)

Jika Anda ingin mengkonversi kembali dari waktu UNIX ke waktu Tanggal Swift, Anda dapat menggunakan berikut

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

Swift timeIntervalSince1970mengembalikan detik dengan apa yang didokumentasikan sebagai presisi "sub-milidetik", yang saya amati biasanya berarti mikrodetik tetapi terkadang satu skala (satu digit di sebelah kanan desimal) kurang atau lebih. Ketika mengembalikan skala 5 (5 digit setelah desimal), saya tidak tahu apakah Swift menjatuhkan 0 di belakang atau tidak dapat menghasilkan 6 skala presisi. Tetapi ketika ia mengembalikan skala 7, digit tambahan itu dapat dipotong karena di luar presisi mikrodetik. Oleh karena itu, untuk nilai yang konsisten dan presisi-benar:

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

Sayangnya, bagaimanapun, di tahun 2038, nomor 32-bit tidak dapat digunakan untuk stempel waktu Unix dan harus 64-bit.

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

Sebuah ekstensi:

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

Date().unixTimestamp
bsod
sumber
0

Jika Anda tidak ingin mengimpor Foundation, yaitu untuk penggunaan Linux dll, Anda dapat menggunakan berikut ini dari CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970
rshev
sumber
Apakah Anda tahu kapan hal-hal yang mungkin kencan dan teman-teman akan menjadi lintas platform?
Zoltán Matók
@ ZoltánMatók Saya mendengar mereka memiliki rencana untuk mengimplementasikan kembali Foundation lebih banyak di tempat terbuka. Kunjungi forums.swift.org untuk info lebih lanjut.
rshev