计算Swift Int中的时间差

问题描述:

我需要计算两个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

你不应该被减去他们计算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

继承你从一个陌生的角度接近这个,并导致你自己的问题。

不是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