【发布时间】:2017-02-17 10:41:39
【问题描述】:
我正在更新我对 Swift 3 的一些旧 Swift 2 答案。不过,My answer 到 this question 并不容易更新,因为该问题专门要求 NSDate 而不是 Date。因此,我正在创建该问题的新版本,我可以更新我的答案。
问题
如果我从这样的Date 实例开始
let someDate = Date()
如何将其转换为整数?
相关但不同
这些问题问的是不同的问题:
【问题讨论】:
我正在更新我对 Swift 3 的一些旧 Swift 2 答案。不过,My answer 到 this question 并不容易更新,因为该问题专门要求 NSDate 而不是 Date。因此,我正在创建该问题的新版本,我可以更新我的答案。
问题
如果我从这样的Date 实例开始
let someDate = Date()
如何将其转换为整数?
相关但不同
这些问题问的是不同的问题:
【问题讨论】:
Date 到 Int
// using current date and time as an example
let someDate = Date()
// convert Date to TimeInterval (typealias for Double)
let timeInterval = someDate.timeIntervalSince1970
// convert to Integer
let myInt = Int(timeInterval)
执行Double 到Int 的转换会导致毫秒数丢失。如果您需要毫秒数,请乘以 1000,然后再转换为 Int。
Int 到 Date
为了完整起见,包括相反的内容。
// convert Int to TimeInterval (typealias for Double)
let timeInterval = TimeInterval(myInt)
// create NSDate from Double (NSTimeInterval)
let myNSDate = Date(timeIntervalSince1970: timeInterval)
I could have also used `timeIntervalSinceReferenceDate` instead of `timeIntervalSince1970` as long as I was consistent. This is assuming that the time interval is in seconds. Note that Java uses milliseconds.
NSDate 的旧 Swift 2 语法,请参阅 this answer。【讨论】:
如果您正在寻找 timestamp 和 10 Digit seconds since 1970 以进行 API 调用,那么下面是代码:
Swift 4/Swift 5 只需 1 行代码
let timeStamp = UInt64(Date().timeIntervalSince1970)
print(timeStamp)
1587473264
let timeStamp = UInt64((Date().timeIntervalSince1970) * 1000) // will give 13 digit timestamp in milli seconds
【讨论】:
Date().timeIntervalSince1970 将以秒为单位返回一个 Double 值。如果您希望它以毫秒为单位,则需要乘以 1000。无论哪种方式,您仍然需要将其转换为 Int64:Int64(timeStamp * 1000)。
timeIntervalSince1970是相关的开始时间,方便,苹果提供。
如果你希望int值更小,你可以选择你喜欢的相关开始时间
extension Date{
var intVal: Int?{
if let d = Date.coordinate{
let inteval = Date().timeIntervalSince(d)
return Int(inteval)
}
return nil
}
// today's time is close to `2020-04-17 05:06:06`
static let coordinate: Date? = {
let dateFormatCoordinate = DateFormatter()
dateFormatCoordinate.dateFormat = "yyyy-MM-dd HH:mm:ss"
if let d = dateFormatCoordinate.date(from: "2020-04-17 05:06:06") {
return d
}
return nil
}()
}
extension Int{
var dateVal: Date?{
// convert Int to Double
let interval = Double(self)
if let d = Date.coordinate{
return Date(timeInterval: interval, since: d)
}
return nil
}
}
这样使用:
let d = Date()
print(d)
// date to integer, you need to unwrap the optional
print(d.intVal)
// integer to date
print(d.intVal?.dateVal)
【讨论】: