Swift 为什么我的日期对象(Equatable)在将其转换为字符串并返回后不相等?

aes*_*abs 1 date swift

我正在编写一个单元测试来检查我从日期到字符串的转换是否成功。

我通过以下方式将其转换为字符串:

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

并通过以下方式将其转换回:

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

如果您尝试在转换前日期和转换后日期使用 Equatable 协议,它表示它们不相同。但是,如果您将 pre 和 post 日期都转换为字符串并进行比较,则它们是 Equatable 的。这是我在前后日期运行 XCAssertEqual 时所说的:

XCTAssertEqual failed: ("2020-01-22 19:35:40 +0000") is not equal to ("2020-01-22 19:35:40 +0000")
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来非常相似。我什至尝试将转换前的日期转换为字符串并返回以检查日期是否相等并且它们仍然不相等

Leo*_*bus 7

问题Date是存储为FloatingPoint值(timeIntervalSinceReferenceDate)。将您的DatetoString和 back to转换为Date. 看看 帖子