Как конвертировать String в Date, получая только дату, а не время в Swift? - PullRequest
0 голосов
/ 06 июня 2018

В настоящее время я получаю дату от API в формате:

"2018-06-09T09: 20: 48"

Я хочусравните эту дату с сегодняшним днем, завтра, иначе у меня другое состояние.

То, что я сделал, это:

func dateFormatter(date: String){
     let today = Date() //2018-06-06 04:54:46 +0000

     let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today) //2018-06-07 04:54:46 +0000

     let dateFormatter = DateFormatter()

     dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

     let date_db = dateFormatter.date(from: date) //2018-06-06 12:32:02 +0000
     if today == date_db{
         print("It is today")
     }
     else if tomorrow = date_db {
         print("It is tomorrow")
     }
     else {
         "After Some Days"
     }
 }

Это не работает, так как сравнивает dateTime с dateTime, поэтому, но я хочу только дату от сегодняшнего дня, завтра и date_dbтак что я могу сравнить их.Как я могу это сделать?

1 Ответ

0 голосов
/ 06 июня 2018

Несколько вопросов.Во-первых, у вас неправильный формат даты.У вас неправильный часовой пояс.У вас неправильный язык.Как только они исправлены, вы можете проанализировать строку даты.

Тогда правильный способ определить, является ли дата сегодня или завтра (игнорируя время), состоит в использовании методов Calendar isDateInToday и isDateInTomorrow.

Вот ваш код со всем исправленным:

func dateFormatter(date: String){
    let dateFormatter = DateFormatter()
    // For a string like "2018-06-09T09:20:48"
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) // assume date is GMT+0

    if let date_db = dateFormatter.date(from: date) {
        if Calendar.current.isDateInToday(date_db) {
            print("It is today")
        } else if Calendar.current.isDateInTomorrow(date_db) {
            print("It is tomorrow")
        } else {
            print("After Some Days")
        }
    } else {
        print("Unexpected date string")
    }
}
...