【问题标题】:Calculate time difference from Int in Swift在 Swift 中计算与 Int 的时间差
【发布时间】:2018-03-31 15:56:09
【问题描述】:

我需要计算两个 Int 之间的差异并将其格式化为显示小时、分钟。我可以将下面的函数部分地与初始 int 差异分开。

示例:如果我的起始 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))
}

【问题讨论】:

  • 你的问题太混乱了。 101 分钟 = 1 小时 41 分钟。之后你想要什么?
  • 到底是什么问题?
  • 我希望使用两个 Int 之间的差异,如果结果是 100 的倍数,则假设每个 100 是一个小时,其余的是分钟。
  • 为什么不除以 100?

标签: swift time int


【解决方案1】:

您不应通过减去它们来计算以Ints 表示的两次之间的差。使用正确的Date API。

在这里,我首先将Ints 转换为字符串,然后使用日期格式化程序对其进行解析。之后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"
}

【讨论】:

  • 谢谢 - 时间不早了,想多了!
【解决方案2】:

你天生就是从一个奇怪的角度来处理这个问题并给自己带来问题。

使用可保存完整日期信息的 TimeInterval 代替不适合存储时间的 Int,例如:

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

那么当你想确定两次之间的时间差时,这是非常基本的算术。

【讨论】:

    【解决方案3】:

    SWIFT 4

    在 Swift 4 中 characters 已弃用,因此 Swift 4 中的 Sweepers 解决方案是

    func calculateTimeDifference(start: Int, end: Int) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "HHmm"
        var startString = "\(start)"
        if startString.count < 4 {
            for _ in 0..<(4 - startString.count) {
                startString = "0" + startString
            }
        }
        var endString = "\(end)"
        if endString.count < 4 {
            for _ in 0..<(4 - endString.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"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多