Skip to content

Instantly share code, notes, and snippets.

@srmds
Created November 28, 2016 13:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save srmds/82ecacb52517cbe8e6f5f78ead67f022 to your computer and use it in GitHub Desktop.
Save srmds/82ecacb52517cbe8e6f5f78ead67f022 to your computer and use it in GitHub Desktop.
TimeFormatter Swift 3.0 - Convert milliseconds to a formatted output string of hours:minutes:seconds with applied padding
//
// TimeFormatter.swift
//
// Convert milliseconds to a formatted output string containing hours:minutes:seconds
// with padding zero.
//
// Created by srmds on 28/11/16.
// Copyright © 2015 srmds. All rights reserved.
//
import Foundation
//Custom extension method to append Strings
extension String {
mutating func append(str: String) {
self = self + str
}
}
class TimeFormatter {
func getFormattedDurationString(trackDuration: NSNumber?) -> String {
guard let trackDuration = trackDuration, trackDuration.doubleValue > 1000.0 else {
return "00:00:00"
}
let milliseconds = trackDuration.doubleValue
var seconds = milliseconds / 1000;
var minutes = seconds / 60;
seconds = seconds.truncatingRemainder(dividingBy: 60)
let hours = minutes / 60;
minutes = minutes.truncatingRemainder(dividingBy: 60)
var timeComponents = Dictionary<String,Int>()
timeComponents = ["hours":Int(hours), "minutes":Int(minutes),"seconds":Int(seconds)]
return self.durationStringBuilder(timeComponents: timeComponents as NSDictionary?)
}
private func durationStringBuilder(timeComponents:NSDictionary?) -> String {
var result:String = ""
guard let timeComponents = timeComponents, timeComponents.count == 3 else {
return result
}
let hours = setZeroPadding(timeComponent: timeComponents["hours"] as? Int, delimiter: false)
let minutes = setZeroPadding(timeComponent: timeComponents["minutes"] as? Int, delimiter: false)
let seconds = setZeroPadding(timeComponent: timeComponents["seconds"] as? Int, delimiter: true)
result.append(hours)
result.append(minutes)
result.append(seconds)
return result
}
private func setZeroPadding(timeComponent: Int?, delimiter: Bool) -> String {
var result:String = ""
guard let timeComponent = timeComponent, timeComponent > 0 else {
if !delimiter {
result.append("00:")
return result
} else {
result.append("00")
return result
}
}
if(timeComponent < 10){
if !delimiter {
result.append("0\(timeComponent):")
} else{
result.append("0\(timeComponent)")
}
} else {
if !delimiter {
result.append("\(timeComponent):")
} else{
result.append("\(timeComponent)")
}
}
return result
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment