Дата в строку [строка формата] Строка в дату в Swift - PullRequest
0 голосов
/ 09 апреля 2020

Я весь день ломал голову над этой проблемой и, похоже, не могу найти решение. У меня есть фитнес-программа, которая запрашивает хранилище данных о здоровье. В предикате ForSamples (withStart: myStartDate, end: myEndDate) я обнаружил, что получение даты из datePicker отправляет момент времени, и поэтому мой запрос не возвращает результаты за весь день, как мне бы хотелось. Итак, я решил, что если я возьму дату datePicker и преобразую ее в начальный и конечный формат, моя проблема будет решена. Однако использование let date = dateFormatter.date (from: dateString) возвращает правильную дату, но время возвращается как 04:00:00 +0000 для обеих функций.

Если у кого-то есть предложение, пожалуйста, не стесняйтесь протянуть руку помощи. Большое вам спасибо!

func convertStartDate(StartDate: Date) -> Date {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyy-MM-dd '00':'00':'01' +0000"
    let dateString = dateFormatter.string(from: StartDate)
    print("convertingStartDate() - \(dateString)")
    let date = dateFormatter.date(from: dateString)
    print(date as Any)

    return date!
}

func convertEndDate(EndDate: Date) -> Date {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyy-MM-dd '23':'59':'59' +0000"
    let dateString = dateFormatter.string(from: EndDate)
    print("convertingEndDate() - \(dateString)")
    let date = dateFormatter.date(from: dateString)

    return date!
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

В дополнение к вышесказанному, это на самом деле исправлено установкой dateFormatter.timeZone = TimeZone(secondsFromGMT: 0), так как секунды с GMT - ваша проблема.

1 голос
/ 09 апреля 2020

Это должно решить вашу проблему

func convertStartDate(StartDate: Date) -> Date {

    let dateFormatter = DateFormatter()
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    dateFormatter.dateFormat = "yyy-MM-dd '00':'00':'01' +0000"
    let dateString = dateFormatter.string(from: StartDate)
    dateFormatter.dateFormat = "yyy-MM-dd HH:mm:ss +0000"
    let date = dateFormatter.date(from: dateString)
    print(date as Any)

    return date!
}

func convertEndDate(EndDate: Date) -> Date {

    let dateFormatter = DateFormatter()
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    dateFormatter.dateFormat = "yyy-MM-dd '23':'59':'59' +0000"
    let dateString = dateFormatter.string(from: EndDate)
    dateFormatter.dateFormat = "yyy-MM-dd HH:mm:ss +0000"
    let date = dateFormatter.date(from: dateString)

    return date!
}
...