在Swift中获取Unix Epoch Time

时间:2014-08-02 15:30:10

标签: time swift

你如何从Swift的时代中获得秒数?

6 个答案:

答案 0 :(得分:131)

您可以简单地使用NSDate的timeIntervalSince1970功能。

let timeInterval = NSDate().timeIntervalSince1970

答案 1 :(得分:62)

对于Swift 3.0

Date().timeIntervalSince1970

答案 2 :(得分:3)

您可以使用以下内容

Int(Date().timeIntervalSince1970)

这是当前日期,如果要获取给定日期

Int(myDate.timeIntervalSince1970)

如果要从UNIX时间时代转换回Swift日期时间,可以使用以下命令

let date = Date(timeIntervalSince1970: unixtEpochTime)

答案 3 :(得分:0)

import Darwin

var tval = timeval()
if gettimeofday(&tval, nil) == 0 {
    let secondsSince1970 = Int(tval.tv_sec)
    print(secondsSince1970)      //  1_550_942_280
    let timeIntervalSince1970 = Double(tval.tv_sec) + Double(tval.tv_usec) / 1_000_000
    print(timeIntervalSince1970) //  1_550_942_280.63354
    // if you need the milliseconds just multiply the timeinterval times 1_000
    let millisecondsSince1970 = UInt64(timeIntervalSince1970*1000)
    print(millisecondsSince1970)  // 1_550_942_237_169

}

答案 4 :(得分:0)

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

Swift的timeIntervalSince1970返回的秒数具有“亚毫秒”精度,据我观察,该精度通常为微秒,但有时会少一些或多一种标度(小数点右边的一位)。当它返回5的小数位数(小数点后5位)时,我不知道Swift是丢弃尾随的0还是不能产生6的小数位数。但是,当返回的小数位数为7时,多余的数字可能会被截断,因为它的精度超过了微秒。因此,对于一致且精确的True值:

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

但是,不幸的是,在2038年,32位数字将不能用于Unix时间戳,而必须是64位。

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

扩展名:

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

Date().unixTimestamp

答案 5 :(得分:0)

如果您不想导入Foundation,即供Linux使用等,则可以使用CoreFoundation中的以下内容:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970