2017-10-19 39 views
0

Je dois calculer la différence entre deux Int et la mettre en forme pour afficher les heures, les minutes. Je peux la fonction ci-dessous pour partiellement en dehors de la différence int initiale.Calculez la différence de temps entre Int et Swift

Exemple: Si j'ai un Int début de 0811 puis un Int fin de 0912 la différence est 101. Si je prends alors 12 du résultat que je devrais avoir 91. Quand j'utilise le résultat pour convertir en temps il retourne 1 heure et 31 minutes - ce qui est correct. Cependant, j'ai besoin de le convertir d'une manière ou d'une autre en haut de la chaîne, puis de l'enlever pour formater l'heure correctement. Cela devrait signifier le 101 devrait être 1 heure 1 minute.

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

Votre question est si confuse. 101 minutes = 1 heure 41 minutes. Qu'est-ce que tu veux après ça? –

+0

quel est exactement le problème? – TNguyen

+0

Je cherche à utiliser la différence entre deux Ints et si le résultat est en multiples de 100, supposons que chaque 100 est une heure et le reste est des minutes. – user7684436

Répondre

2

Vous ne devriez pas calculer la différence entre deux fois exprimée en Int s en les soustrayant. Utilisez l'API Date appropriée.

Ici, j'ai d'abord converti les Int en chaînes, puis les ai analysées à l'aide d'un formateur de date. Après cela, timeIntervalSince peut vous dire la différence en secondes. Vous avez juste besoin d'un module et d'une division pour obtenir les heures et les minutes:

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

Merci - il est tard dans la journée ici, était overthinking! – user7684436

1

Inherintly vous l'approche d'un angle étrange et vous causant des problèmes.

Au lieu de Int, qui ne convient pas pour stocker un temps, utilisez TimeInterval qui peut contenir une information à jour complète, par exemple:

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

Ensuite, lorsque vous voulez déterminer la différence de temps entre les deux fois, il est très basique arithmétique.

Playground example