Быстрые часы и минуты от строки до даты - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь применить вычисление между двумя часами.

Я получаю от firebase свои часы в формате String (ЧЧ: мм) и пытаюсь преобразовать его в формат даты (ЧЧ: мм).Затем примените исчисление перед тем, как снова преобразовать в строку и поместите ее в архив в Firebase.

Мой код:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"

ref.child("Experience").child(userID!).observeSingleEvent(of: .value) {(snapshot) in
    if let value = snapshot.value as? [String:String]{
        let value = snapshot.value as? NSDictionary

        let total_time = value?["TOTAL_TIME"] as? String ?? "00:00" // Received from Firebase

        self.oldDateTotalTime = dateFormatter.date(from: total_time)! //trying to convert into a Date format
        print(self.oldDateTotalTime)

        self.oldStringTotalTime = total_time //just for test
    }

Этот код не работал, потому что, я думаю, из dateFormatter.

S мои вопросы:

  1. Как я могу получить Date от моего String?
  2. Как я могу получить после моего String от моего Date?

edit:
Чтобы уточнить мой вопрос, моя цель - вычесть одно временное значение из общего временного значения.У меня есть общий опыт пользователя, то есть 700 H 50 минут с дано на Firebase, как это: 700: 50.В другой части у меня есть некоторые специфические события, например, 1 час 40 минут с заданным как 1:40 в firebase.
Моя просьба вычесть конкретный опыт из глобального.

700:50 - 1:40 = 699:10

На моем текущем опыте со Свифтом я использую только Date() & DateFormatter, чтобы иметь дело со временем, и я не знаю, как иметь дело только со временем, а не с датой ...

Надеюсь, вы лучше поймете это с моей правкой

1 Ответ

0 голосов
/ 21 января 2019

Если вам нужно, вот код регулярного выражения;безусловно, можно оптимизировать.

func stringToTime(_ timeStr: String) -> (Int, Int) {
    var hours = 0
    var minutes = 0
    let patternH = "[0-9]*[:]" // digits, followed by :
    let regexH = try! NSRegularExpression(pattern: patternH, options: .caseInsensitive)
    if let matchH = regexH.firstMatch(in: timeStr, range: NSRange(0..<timeStr.utf16.count)) {
        let hStr = String(timeStr[Range(matchH.range(at: 0), in: timeStr)!]).dropLast()
        hours = Int(hStr) ?? 0
        let patternM = "[:][0-9]{1,2}"  //  1 or 2 digits
        let regexM = try! NSRegularExpression(pattern: patternM, options: .caseInsensitive)
        if let matchM = regexM.firstMatch(in: timeStr, range: NSRange(0..<timeStr.utf16.count)) {
            let mStr = String(timeStr[Range(matchM.range(at: 0), in: timeStr)!]).dropFirst()
            minutes = Int(mStr) ?? 0
        }
    }

    return (hours, minutes)
}

let timeStr = "700:50"
let time1 = stringToTime("700:50")
let time2 = stringToTime("1:40")

var time = (time1.0 - time2.0, time1.1 - time2.1)
if time.1 < 0 {
    time.1 = time.1 + 60
    time.0 -= 1
}

print(time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...