你如何从Swift的时代中获得秒数?
答案 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