Swift Unix Epoch Time'ı edinin


104

Swift'de çağdan saniyeleri nasıl elde edersiniz?


2
Objective-C ile aynı - NSDate kullanın.
gnasher729

2
Apple ürünlerini geliştirmekten kaçındım çünkü Objective-C'den nefret ediyorum. Sonuç olarak ben öğrenmedim. Ve Swift sözdiziminin en azından biraz farklı olduğunu biliyorum. Bana sadece sözdizimini göster. Kendinize biraz kolay SO itibar kazanın.
Chris Redford


3
Hayır, Swift yöntemi için girişe doğrudan bağlantılar: - timeIntervalSince1970.
zaph

3
Aslında belirli bir yöntemle bağlantı kurdum :)
Martin R

Yanıtlar:


164

NSDate'in timeIntervalSince1970işlevini basitçe kullanabilirsiniz .

let timeInterval = NSDate().timeIntervalSince1970

7
Bunun Foundation'ın ithal edilmesi gerektiğini unutmayın.
AlBlue

3
Foundation'ı kullanmadan nasıl olur?
marius

3
Eğer vakıf kullanmak istemiyorsanız o zaman AFNetworking / AlamoFire (kullanabilirsiniz github.com/Alamofire/Alamofire yüklemek için) currentmillis.com ve sonra sayfanın html ayrıştırmak. Ağ gecikmelerini hesaba katmanız ve bağlantı olup olmadığını kontrol etmeniz gerektiğini unutmayın. Sadece Foundation'ı kullanmaya karar verdim ...
Chase Roberts

2
İnt olarak nasıl olur?
rstackhouse


1

Aşağıdakileri kullanarak elde edebilirsiniz

Int(Date().timeIntervalSince1970)

Belirli bir tarih için almak istiyorsanız, bu geçerli tarih içindir

Int(myDate.timeIntervalSince1970)

UNIX zaman döneminden Swift Tarih saatine geri dönmek istiyorsanız, aşağıdakileri kullanabilirsiniz.

let date = Date(timeIntervalSince1970: unixtEpochTime)

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

Swift timeIntervalSince1970, saniyeleri "milisaniyenin altı" olarak belgelenen hassasiyetle döndürüyor, ki bunun genellikle mikrosaniyeler, ancak bazen bir ölçek (ondalığın sağındaki bir basamak) daha az veya daha fazla olduğunu gözlemledim. Bir 5 ölçeği döndürdüğünde (ondalıktan sonra 5 basamak), Swift'in sondaki 0'ı düşürüp düşürmediğini veya 6 kesinlik ölçeği üretemediğini bilmiyorum. Ancak 7 ölçeğini döndürdüğünde, bu fazladan rakam kesilebilir çünkü mikrosaniye hassasiyetinin ötesindedir. Bu nedenle, tutarlı ve hassas doğru değerler için:

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

Ne yazık ki, 2038 yılında, 32-bit sayılar Unix zaman damgası için kullanılamayacak ve 64-bit olmaları gerekecek.

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

Bir uzantı:

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

Date().unixTimestamp

0

Foundation'ı ithal etmek istemiyorsanız, yani Linux kullanımı vb. İçin CoreFoundation'dan aşağıdakileri kullanabilirsiniz:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

İşlerin ne zaman Buluşma ve arkadaşların platformlar arası hale geleceğini biliyor musunuz?
Zoltán Matók

@ ZoltánMatók Açıkta daha fazla Foundation'ı yeniden uygulama planları olduğunu duydum. Daha fazla bilgi için forums.swift.org sitesine bakın.
rshev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.