#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])
}