我正在将Swift 3的一些旧的Swift 2答案更新为My answer到this question,但由于问题明确要求NSDate
而不是{{},因此不容易更新{1}}。所以我正在创建该问题的新版本,我可以更新我的答案。
问题
如果我从这样的Date
实例开始
Date
如何将其转换为整数?
相关但不同
这些问题提出了不同的问题:
答案 0 :(得分:60)
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 Double
let timeInterval = Double(myInt)
// create NSDate from Double (NSTimeInterval)
let myNSDate = Date(timeIntervalSince1970: timeInterval)
代替timeIntervalSinceReferenceDate
。这假设时间间隔以秒为单位。请注意,Java使用毫秒。
timeIntervalSince1970
的旧版Swift 2语法,请参阅this answer。答案 1 :(得分:1)
timeIntervalSince1970
是相关的开始时间,方便且由Apple提供。
如果您希望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)
答案 2 :(得分:0)
如果您要通过 10 Digit milliseconds since 1970
寻找 时间戳 用于 API 调用,则下面是代码:
Swift 4 / Swift 5只需1行代码
let timeStamp = Date().timeIntervalSince1970
print(timeStamp)
<-打印当前时间戳记
1587473264