Получение значения часа из строки времени в Swift

#swift #nsdateformatter

#swift #nsdateformatter

Вопрос:

Я пытаюсь получить значение Int для часа из строки.

 let time = 13:24
    func getNtfHour() -> Date{
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH"
        let result = dateFormatter.date(from: time)!
        return result //2000-01-01 08:24:00  0000
    }
 

Как вы можете видеть, мой текущий код возвращает целую дату, а время не совпадает со строкой. Как мне это исправить?

редактировать: мне удалось сделать это с помощью компонентов даты

     let time = 13:24
    func getNtfHour() -> Int{
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        let result = dateFormatter.date(from: time)!
        let calendar = Calendar.current.component(.hour, from: result)
        return calendar //13
    }
 

Комментарии:

1. Подсказка: DateComponents

2. Ваш код должен аварийно завершиться. Как вы думаете, iOS знает, как сопоставить HH 13:24 ?

Ответ №1:

Поскольку строка времени фактически не связана с форматером даты, более простым способом является прямой анализ строки.

Если в часе всегда две цифры

 let time = "13:24"
let hour = Int(time.prefix(2))
 

или иначе

 let time = "13:24"
if let range = time.range(of: "^\d ", options: .regularExpression) {
    let hour = Int(time[range])
}