J'ai 2 variables où je reçois 2 fois de datePicker et je dois enregistrer sur une variable la différence entre elles.
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HHmm"
time2 = timeFormatter.date(from: timeFormatter.string(from: datePicker.date))!
J'ai essayé d'obtenir le timeIntervalSince1970 d'eux et d'eux de les soustraire et d'obtenir la différence en millisecondes que je reviendrai en heures et minutes, mais j'obtiens un très grand nombre qui ne correspond pas à l'heure réelle.
let dateTest = time2.timeIntervalSince1970 - time1.timeIntervalSince1970
Ensuite, j'ai essayé d'utiliser time2.timeIntervalSince (date: time1), mais encore une fois, les millisecondes résultantes sont beaucoup plus que l'heure réelle.
Comment puis-je obtenir le décalage horaire correct entre 2 fois et obtenir le résultat en heures et minutes au format "0823" pendant 8 heures et 23 minutes?
La méthode recommandée pour effectuer des calculs de date est Calendar
et DateComponents
let difference = Calendar.current.dateComponents([.hour, .minute], from: time1, to: time2)
let formattedString = String(format: "%02ld%02ld", difference.hour!, difference.minute!)
print(formattedString)
Le format %02ld
Ajoute le zéro de remplissage.
Si vous avez besoin d'un format standard avec deux points entre les heures et les minutes DateComponentsFormatter()
pourrait être un moyen plus pratique
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute]
print(formatter.string(from: time1, to: time2)!)
TimeInterval
mesure les secondes, pas les millisecondes:
let date1 = Date()
let date2 = Date(timeIntervalSinceNow: 12600) // 3:30
let diff = Int(date2.timeIntervalSince1970 - date1.timeIntervalSince1970)
let hours = diff / 3600
let minutes = (diff - hours * 3600) / 60
Pour obtenir la durée en secondes entre deux intervalles de temps, cela peut être utilisé -
let time1 = Date(timeIntervalSince1970: startTime)
let time2 = Date(timeIntervalSince1970: endTime)
let difference = Calendar.current.dateComponents([.second], from: time1, to: time2)
let duration = difference.second
Vous pouvez maintenant le faire en Swift 5 de cette façon,
func getDateDiff(start: Date, end: Date) -> Seconds {
let calendar = Calendar.current
let dateComponents = calendar.dateComponents([Calendar.Component.second], from: start, to: end)
let seconds = dateComponents.second
return Seconds(seconds!)
}