按日期排序字符串日期的数组(“ yyyy-MM-dd HH:mm:ss.SSSSSS”)

时间:2019-02-13 06:08:21

标签: swift sorting datetime

我有一个包含许多值的数组

每个值都包含dateAdd(不是nil)

我有一个func,在这里对数组进行如下排序:

    func sortByDate(array: [TransactionValues]) -> [TransactionValues] {
    print(array)
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let sortedArray = array.sorted { dateFormatter.date(from: $0.dateAdd)! < dateFormatter.date(from: $1.dateAdd)! }
    print(sortedArray)
    return sortedArray
}

但是失败并显示错误:

  

致命错误:解开可选值时意外发现nil

$ 0.dateAdd不为$ 1.dateAdd

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题是解析日期字符串时使用的日期格式错误。 "2019-02-09 03:57:22.837371"的日期格式应为"yyyy-MM-dd HH:mm:ss.SSSSSS",而不是"yyyy-MM-dd HH:mm:ss"。而且,在解析固定日期格式字符串时,请不要忘记始终将日期格式设置区域设置为en_US_POSIX

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat =  "yyyy-MM-dd HH:mm:ss.SSSSSS"

请注意,ISO8601字符串的创建方式也可以进行排序,而无需将其转换为日期:

let sortedArray = array.sorted { $0.dateAdd < $1.dateAdd }