问题是,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做同样的事情,但您会得到完全相同的计算结果。
一个日期是引擎盖下的秒数。但是秒数(毫秒)不是日期!您在这里使用DateFormatter是完全不合适的。 – matt
我的业务规则要求我使用毫秒,所以我必须使用它。 double(currentTimeInMiliseconds实际上是一个持有毫秒数的变量,但我改变了它可以更好地解释。 – user1079052
这与毫秒毫无关系。听我说的是什么。'differenceDate'不是日期,它不能被格式化作为HH:mm:ss“使用日期格式化程序它不是日期不是日期日期 – matt