获取两个日期之间的差异

时间:2016-10-18 18:54:21

标签: ios swift time nsdate

我需要毫秒和当前日期之间的差异。它需要被格式化为HH:mm:ss并且我的代码没有正确的差异。

var differenceDate = NSDate(timeIntervalSince1970: Double(currentTimeInMiliseconds()))
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm:ss"
        self.callDetail.text = dateFormatter.string(from: differenceDate as Date)

 func currentTimeInMiliseconds() -> Int! {
        let date = NSDate()
        return Int(date.timeIntervalSince1970 * 1000)
    }

3 个答案:

答案 0 :(得分:3)

如果您想要HH:mm:ss格式的两个日期对象之间的时间量,通常会使用NSDateComponentsFormatter。在Swift 3中:

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour, .minute, .second]
formatter.zeroFormattingBehavior = .pad

let string = formatter.string(from: referenceDate, to: date)

在Swift 2中:

let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Positional
formatter.allowedUnits = [.Hour, .Minute, .Second]
formatter.zeroFormattingBehavior = .Pad

let string = formatter.stringFromDate(referenceDate, toDate: date)

答案 1 :(得分:1)

问题在于differenceDate,尽管有名字,但不是约会!它只是一个时间间隔 - 一个抽象的秒数。如果你想把它表示为小时,分钟和秒,只需保持除以60并取余数。但请记住,那些不是真正的小时,分钟和秒。

示例:

// make two dates, get the difference
let greg = Calendar(identifier: .gregorian)
let dc = DateComponents(calendar: greg, 
    year: 1954, month: 8, day: 10, hour: 3, minute: 0, second: 0)
let d1 = greg.date(from: dc)!
let d2 = Date()
let diff = d2.timeIntervalSince(d1)

// calculate hours, minutes, and seconds
var min = diff/60
let sec = diff.truncatingRemainder(dividingBy: 60)
let hr = min/60
min = min.truncatingRemainder(dividingBy: 60)

// format the output as a string
let nf = NumberFormatter()
nf.roundingMode = .floor
nf.minimumIntegerDigits = 2

let hrs = nf.string(from: hr as NSNumber)
let mins = nf.string(from: min as NSNumber)

nf.maximumFractionDigits = 3
let secs = nf.string(from: sec as NSNumber)

print(hrs! + ":" + mins! + ":" + secs!) // 545169:33:18.841

这可以为您提供所需的格式和毫秒数。你可以像Rob建议的那样用DateComponentsFormatter做同样的事情,但你会得到完全相同的计算结果。

答案 2 :(得分:0)

我发现最简单的方法是使用NSCalendar

let calendar: NSCalendar = NSCalendar.current as NSCalendar
        let date1 = call!.startTime.dateFromMilliseconds()
        let date2 = NSDate()
        let components = calendar.components([.hour, .second, .minute], from: date1 , to: date2 as Date, options: [])
        differenceDate =  NSCalendar(identifier: NSCalendar.Identifier.gregorian)?.date(from: components) as NSDate!