Swift Почему мой объект даты, который (Equatable) не равен после преобразования его в строку и обратно? - PullRequest
1 голос
/ 22 января 2020

Я пишу модульный тест, чтобы проверить, что мое преобразование из даты в строку и обратно прошло успешно.

Я преобразую его в строку с помощью:

func convertDateToString(date: Date) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    return dateFormatter.string(from: date)
}

и преобразую обратно через:

func convertStringToDate(string: String) -> Date {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    return dateFormatter.date(from: string)!
}

Если вы попытаетесь использовать протокол Equatable в дату до конверсии и в дату после конвертации, он скажет, что они не совпадают. Тем не менее, если вы преобразуете даты до и после в строки и сравниваете их, они равнозначны. Это то, что он говорит, когда я запускаю XCAssertEqual до и после даты:

XCTAssertEqual failed: ("2020-01-22 19:35:40 +0000") is not equal to ("2020-01-22 19:35:40 +0000")

Что выглядит довольно идентично для меня. Я даже попытался преобразовать дату перед преобразованием в строку и обратно, чтобы проверить, были ли даты равны, и они все еще не были

1 Ответ

7 голосов
/ 22 января 2020

Проблема в том, что Date хранится как значение FloatingPoint (timeIntervalSinceReferenceDate). Там сбрасываются доли секунды при конвертации Date в String и обратно в Date. Взгляните на сообщение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...