2017-10-19 203 views
0

我需要計算兩個Int之間的差異並將其格式化爲小時,分鐘。我可以使用下面的函數來部分區分初始int差異。計算Swift Int中的時間差

示例:如果我有0811開始int和然後的0912端詮釋的差爲101。如果我然後採取12從結果我應該有91。當我使用結果轉換爲時間時,它返回1小時31分鐘 - 這是正確的。不過,我需要以某種方式將其進一步轉換爲鏈,然後將其取消以正確格式化時間。這應該意味着101應該是1小時1分鐘。

func calculateTimeDifference(start: Int, end: Int, longVersion: Bool) -> String { 

    let count = end - start 
    let total = minutesToHoursMinutes(minutes: count) 
    var formatted = "" 

    if total.hours != 0 { 
     formatted += "\(total.hours)" 
     let amount = total.hours > 1 ? " hours " : " hour " 
     formatted += amount 
    } 

    if total.leftMinutes != 0 { 
     formatted += "\(total.leftMinutes)" 
     let amount = total.leftMinutes > 1 ? " minutes " : " minute " 
     formatted += amount 
    } 

    return String(describing: formatted) 

} 

func minutesToHoursMinutes(minutes : Int) -> (hours : Int, leftMinutes : Int) { 
    return (minutes/60, (minutes % 60)) 
} 
+0

你的問題是如此混亂。 101分鐘= 1小時41分鐘。現在你想要什麼? –

+0

究竟是什麼問題? – TNguyen

+0

我期待着使用兩個Ints之間的差異,如果結果是100的倍數,那麼假設每個100是一個小時,剩下的就是幾分鐘。 – user7684436

回答

2

你不應該被減去他們計算Int小號表示兩個時間之間的區別。使用適當的Date API。

在這裏,我首先將Int s轉換爲字符串,然後使用日期格式化程序對其進行解析。之後,timeIntervalSince可以在幾秒鐘內告訴你的差異。你只需要一些模數和分數來獲得小時和分鐘:

func calculateTimeDifference(start: Int, end: Int) -> String { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "HHmm" 
    var startString = "\(start)" 
    if startString.characters.count < 4 { 
     for _ in 0..<(4 - startString.characters.count) { 
      startString = "0" + startString 
     } 
    } 
    var endString = "\(end)" 
    if endString.characters.count < 4 { 
     for _ in 0..<(4 - endString.characters.count) { 
      endString = "0" + endString 
     } 
    } 
    let startDate = formatter.date(from: startString)! 
    let endDate = formatter.date(from: endString)! 
    let difference = endDate.timeIntervalSince(startDate) 
    return "\(Int(difference)/3600)Hr \(Int(difference) % 3600/60)Min" 
} 
+0

謝謝 - 這天晚了,已經過時了! – user7684436

1

繼承你從一個陌生的角度接近這個,並導致你自己的問題。

不是int,這是不恰當的存儲時間,使用TimeInterval所可容納一個完整的日期信息,例如:

let second:TimeInterval = 1.0 
let minute:TimeInterval = 60.0 
let hour:TimeInterval = 60.0 * minute 
let day:TimeInterval = 24 * hour 

然後,當你要確定兩個時間之間的時間差,這是非常基本的算術。

Playground example