Проблема заключается в том, что differenceDate
, несмотря на название, это не свидание! Это всего лишь временной интервал - абстрактное количество секунд. Если вы хотите выразить это как часы, минуты и секунды, просто продолжайте разделение на 60 и проведите остаток. Но имейте в виду, что это не real часов, минут и секунд.
Пример:
// 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
Это дает нужный формат и ваши миллисекунды. Вы можете сделать то же самое с DateComponentsFormatter, как это предложил Роб, но вы получите точно такой же рассчитанный результат.
Свидание это количество секунд под капотом. Но количество секунд (миллисекунд) - это не дата! Ваше использование DateFormatter здесь совершенно неуместно. – matt
Мои бизнес-правила требуют от меня использовать миллисекунды, поэтому я должен использовать его. Двойной (currentTimeInMiliseconds фактически переходит к переменной, содержащей миллисекунды, но я изменил ее, чтобы лучше объяснить. – user1079052
Это не имеет ничего общего с миллисекундами. Слушайте то, что я говорю. 'DifferenceDate' не является датой. Его нельзя отформатировать как HH: mm: ss "используя формат даты. Это не дата. Нет A. Дата – matt