Как получить только время от даты в Swift - PullRequest
0 голосов
/ 01 мая 2020

Этот вопрос не задают впервые, но у меня нет решения. Я получаю время в строке от ответа API в следующем формате «14:45». Я хочу сравнить это время с текущим временем, для этого мне нужно преобразовать эту строку в формат времени (быстрый спорт). Я всегда получаю nil после преобразования. Я пробовал несколько способов, но ни один из них не работал для меня, и один приведены для справки, я не знаю, что мне здесь не хватает

Спасибо за любой ответ

     func stringToTime(str:String) -> Date{ // 14:45 passed here in str
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "hh:mm a"
        print(str)
        //here time string prints
        let date = dateFormatter.date(from: (str))
        print(date)
        //date is nil here, should be 02:45 pm
        return date!

}

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Если время, которое вы получаете от API в формате 24 часа, вы можете выполнить сравнение строк

let formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
let currentTime = formatter.string(from: Date())

let compare = currentTime.compare("14:45")

Возможно, вам потребуется установить часовой пояс для DateFormatter, чтобы убедиться, что он использует то же самое, что и API

0 голосов
/ 01 мая 2020

Похоже, вы хотите преобразовать строку времени в одном формате в другой формат. Подпись вашего метода должна выглядеть следующим образом:

func changeFormat(str:String) -> String {

Обратите внимание, что вы не должны выводить здесь Date, потому что Date s не имеют форматов . Они всегда будут напечатаны одинаково. В этом методе вам нужно сделать 2 вещи:

  • разобрать str в Date, используя DateFormatter, указав формат HH:mm. Кажется, вы предполагаете, что DateFormatter может автоматически работать с этим форматом. Он не может: (

  • отформатировать объект Date, который вы только что получили, используя DateFormatter, указав формат hh:mm a. Это создает строку, а не дату.

(Вы также можете рассмотреть возможность возврата метода Date (тогда он будет называться parseTime) и выполнить второй шаг непосредственно перед отображением даты для экран .)

func changeFormat(str:String) -> String {
    let dateFormatter = DateFormatter()

    // step 1
    dateFormatter.dateFormat = "HH:mm" // input format
    let date = dateFormatter.date(from: str)!

    // step 2
    dateFormatter.dateFormat = "hh:mm a" // output format
    let string = dateFormatter.string(from: date)
    return string
}
...