Как суммировать массив времени Длительность в строковом формате - PullRequest
0 голосов
/ 04 июня 2018

У меня есть массив строк в следующем формате:

let sample_array = ["05:30","06:20","04:20","09:40"]

Когда после преобразования всех форматов string в DATE, как мы можем найти общее время?из этого массива.

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Из вопроса и комментариев кажется, что вы пытаетесь вычислить общее время (в часах и минутах) из данного массива.

let sample_array = ["05:30","06:20","04:20","09:40"]

func getTime(arr: [String]) -> Int {

  var total = 0
  for obj in arr {

      let comp = obj.split(separator: ":")

      var hours = 0
      var minutes = 0
      if let hr = comp.first, let h = Int(String(hr)) {
        hours = h * 60
      }

      if let mn = comp.last, let min = Int(String(mn)) {
        minutes = min
      }

      total += hours
      total += minutes

    }
    return total

}

let totalTime = getTime(arr: sample_array)
print(totalTime)

let hours = totalTime/60
let minutes = totalTime%60
print("\(hours) hours and \(minutes) minutes")

Вы также можете дополнительно рассчитать дни, месяц и год.

Надеюсь, это то, что вы хотите.

0 голосов
/ 04 июня 2018

Для вашего случая я бы посоветовал разобраться с этим, не рассматривая его как даты.Вы можете получить желаемый результат, реализовав функцию как:

func getTotalTime(_ array: [String]) -> String {
    // getting the summation of minutes and seconds
    var minutesSummation = 0
    var secondsSummation = 0

    array.forEach { string in
        minutesSummation += Int(string.components(separatedBy: ":").first ?? "0")!
        secondsSummation += Int(string.components(separatedBy: ":").last ?? "0")!
    }

    // converting seconds to minutes
    let minutesInSeconds = secondsToMinutes(seconds: secondsSummation).0
    let restOfSeconds = secondsToMinutes(seconds: secondsSummation).1

    return "\(minutesSummation + minutesInSeconds):\(restOfSeconds)"
}

// https://stackoverflow.com/questions/26794703/swift-integer-conversion-to-hours-minutes-seconds
func secondsToMinutes (seconds : Int) -> (Int, Int) {
    return ((seconds % 3600) / 60, (seconds % 3600) % 60)
}

Следовательно:

let array = ["20:40" , "20:40"]
let result = getTotalTime(array)
print(result) // 41:20
0 голосов
/ 04 июня 2018

Я думаю, что вы можете пропустить преобразование строки в дату для достижения желаемого результата:

let sample_array = ["05:30","06:20","04:20","09:40"]
var hours:Int = 0
var minutes:Int = 0
for timeString in sample_array {
    let components = timeString.components(separatedBy: ":")
    let hourComp = Int(components.first ?? "0") ?? 0
    let minComp = Int(components.last ?? "0") ?? 0
    hours += hourComp
    minutes += minComp
}
hours += minutes/60
minutes = minutes%60
let hoursString = hours > 9 ? hours.description : "0\(hours)"
let minsString = minutes > 9 ? minutes.description : "0\(minutes)"
let totalTime = hoursString+":"+minsString
...