не удается преобразовать строку в дату

#ios #swift #iphone #nsdate #xcode10.1

#iOS #swift #iPhone #nsdate #xcode10.1

Вопрос:

У меня есть строка, скажем, «24:00». Мне нужно преобразовать в дату.Я перепробовал все способы.Но всегда получается nil.

вот мой код :

 let timeformat = DateFormatter()
timeformat.dateFormat = "K:mm"
timeformat.locale = Locale(identifier: "en_US_POSIX")
guard let endtime = dateFormatter.date(from: selCloseTime!) else {
                fatalError("ERROR: Date conversion failed due to mismatched format.")
            }
  

ошибка: Неустранимая ошибка: ОШИБКА: не удалось преобразовать дату из-за несоответствия
формат.

я попытался изменить формат на :

 HH:mm
H:mm
KK:mm (small amp; caps  -> k)
K:mm (small amp; caps - > k)
  

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

 "24.00", "01:00", "20:00" , "03:00"
  

Любая помощь по этому поводу.

Заранее спасибо ~

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

1. попробуйте timeformat.date (из: selCloseTime!) ?

2. @KingofBliss тот же ноль, только я получаю

3. Две разные переменные timeformat и dateFormatter какую из них вы используете для форматирования объекта date?

4. @macrodues чтобы найти фактическую дату, вам нужно передать время с указанием даты, месяца и года, используя эти данные, вы только конвертируете их в формат времени.

Ответ №1:

Измените timeformat.dateFormat = "K:mm" на timeformat.dateFormat = "kk:mm" и увидите этот результат.

 let selCloseTime = "20:00"
let timeformat = DateFormatter()
timeformat.dateFormat = "kk:mm"
timeformat.locale = Locale(identifier: "en_US_POSIX")
guard let endtime = timeformat.date(from: selCloseTime) else {
    fatalError("ERROR: Date conversion failed due to mismatched format.")
}
print(endtime)
  

введите описание изображения здесь

Ответ №2:

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

 let dateString = "20:32"
let df = DateFormatter()
df.dateFormat = "HH:mm"
let d = df.date(from: dateString) // "Jan 1, 2000 at 8:32 PM"
  

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

1. это возвращает 2000-01-01 15:02:00 0000 неправильное время

Ответ №3:

Формат времени от 24 часов до 12 часов

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

let date = dateFormatter.date(from: dateAsString)
dateFormatter.dateFormat = "h:mm a"
let Date12 = dateFormatter.string(from: date!)
print("12 hour formatted Date:",Date12) // 1:15 PM