2017-10-19 5 views
0

私は2つのIntの差を計算し、時、分を示すように書式化する必要があります。私は最初のintの違いから部分的に離れて以下の関数を使うことができます。SwiftのIntとの時差を計算します

例:私は0811の開始のInt、その後0912の終わりINTを持っている場合、私は、私は91を持つべき結果から12を取る場合は差が101です。結果を使用して時刻に変換すると、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

私は2つのIntsの差を使用して、結果が100の倍数であれば、100を1時間とし、残りを分と仮定します。 – user7684436

答えて

2

あなたはそれらを差し引いてInt秒で表される2つの時刻の差を計算するべきではありません。適切なDate APIを使用してください。

ここでは、最初にIntを文字列に変換してから、日付フォーマッタを使用して解析しました。その後、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、の

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

あなたは2時間の間の時間差を決定したい場合、それは非常に基本的です算術。

Playground example