小智 139
您可以简单地使用NSDate的timeIntervalSince1970
功能.
let timeInterval = NSDate().timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)
Sum*_*roi 69
对于Swift 3.0
Date().timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)
bso*_*sod 12
1 秒 = 1,000 毫秒
1 秒 = 1,000,000 微秒
SwifttimeIntervalSince1970
返回的秒数被记录为“亚毫秒”精度,我观察到这通常意味着微秒,但有时会少或多一个刻度(小数点右边的一位数字)。当它返回 5 的小数位(小数点后 5 位)时,我假设 Swift 无法产生 6 个小数位的精度,而当它返回 7 的小数位时,多余的数字可以被截断,因为它超出了微秒精度。所以:
let secondPrecision = Int(Date().timeIntervalSince1970) // definitely precise
let millisecondPrecision = Int(Date().timeIntervalSince1970 * 1_000) // definitely precise
let microsecondPrecision = Int(Date().timeIntervalSince1970 * 1_000_000) // most-likely precise
Run Code Online (Sandbox Code Playgroud)
话虽如此,毫秒精度是真正的 Unix 时间戳,我认为每个人都应该使用它。如果您正在使用使用 Unix 时间戳的 API 或框架,那么它很可能是毫秒精度的。因此,对于 Swift 中真正的 Unix 时间戳:
typealias UnixTimestamp = Int
extension Date {
/// Date to Unix timestamp.
var unixTimestamp: UnixTimestamp {
return UnixTimestamp(self.timeIntervalSince1970 * 1_000) // millisecond precision
}
}
extension UnixTimestamp {
/// Unix timestamp to date.
var date: Date {
return Date(timeIntervalSince1970: TimeInterval(self / 1_000)) // must take a millisecond-precise Unix timestamp
}
}
let unixTimestamp = Date().unixTimestamp
let date = unixTimestamp.date
Run Code Online (Sandbox Code Playgroud)
请注意,在 2038 年,32 位数字将无法用于 Unix 时间戳,它们必须是 64 位,但 Swift 会自动为我们处理,这样我们就可以安全地使用(并且Int
不需要Int64
显式使用)。
您可以使用以下方法获得
Int(Date().timeIntervalSince1970)
Run Code Online (Sandbox Code Playgroud)
这是当前日期,如果您想获取给定日期
Int(myDate.timeIntervalSince1970)
Run Code Online (Sandbox Code Playgroud)
如果要将 UNIX 时间纪元转换回 Swift 日期时间,可以使用以下方法
let date = Date(timeIntervalSince1970: unixtEpochTime)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51243 次 |
最近记录: |