Dapatkan Unix Epoch Time di Swift


102

Bagaimana Anda mendapatkan detik dari epoch di Swift?


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

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


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)

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.