我正在更新我对Swift 3的一些旧的Swift 2答案。不过,My answer to this question并不容易更新,因为这个问题专门要求NSDate
而不是Date
。因此,我正在创建一个新版本的问题,我可以更新我的答案。
问题
如果我从这样的Date
实例开始
let someDate = Date()
我如何把它转换成整数呢?
相关但不同的
这些问题提出了不同的问题:
发布于 2016-10-08 15:19:39
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
的转换会导致毫秒的丢失。如果需要毫秒,那么在转换为Int
之前乘以1000。
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。发布于 2020-04-21 13:03:04
如果您正在寻找具有10 Digit seconds since 1970
for API调用的时间戳,那么下面是代码:
仅1行代码用于Swift 4/ Swift 5
let timeStamp = UInt64(Date().timeIntervalSince1970)
print(timeStamp)
<--打印当前时间戳
1587473264
let timeStamp = UInt64((Date().timeIntervalSince1970) * 1000) // will give 13 digit timestamp in milli seconds
发布于 2020-04-17 07:49:15
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)
https://stackoverflow.com/questions/39934057
复制相似问题