对对象中的字符串日期进行排序

Ahm*_*lab 0 sorting swift

我有表视图,其中包含诸如“从、到、操作、日期和描述”之类的数据。现在我以字符串格式获取日期,我需要按日期从最新日期到较早日期对消息进行排序,我尝试了排序代码,但它只对前两个字符进行排序。例如:tSFDATE 有字符串“11/01/2010”、“01/02/2010”。结果将是

“01/02/2010”、“11/01/2010”。所以任何按日期对 TrackObj 进行排序的解决方案

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! TrackingTableViewCell

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd/MM/yyyy - hh:mm:ss"


        let sortedArray = self.trackingListArr.sorted { dateFormatter.date(from: $0.tSFDATE!)! < dateFormatter.date(from: $1.tSFDATE!)! }


        let trackObj = sortedArray[indexPath.row]


            cell.lblFromValue.text = trackObj.fROMUSERAR!

            cell.lblToValue.text = trackObj.tOUSERAR!

            cell.lblPurpsValue.text = trackObj.tSFPURPOSEAR!

            cell.lblDateValue.text = trackObj.tSFDATE!

            cell.lblNoteValue.text = trackObj.tSFDESCRIPTION!

    return (cell)

}
Run Code Online (Sandbox Code Playgroud)

这是结果图像 在此处输入图片说明

NSA*_*Adi 5

您正在尝试对字符串而不是日期进行排序。要对其进行正确排序,您首先需要将tSFDATE字符串转换为Date,然后对其进行排序。

这应该适用于您现有的阵列...

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy - HH:mm:ss"

let sortedArray = trackingListArr.sorted { (lhs: trackingListArr, rhs: trackingListArr) -> Bool in
    // you can have additional code here
    return dateFormatter.date(from: lhs.tSFDATE)! > dateFormatter.date(from: rhs.tSFDATE)!
}
Run Code Online (Sandbox Code Playgroud)

编辑:紧凑关闭声明

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy - HH:mm:ss"

let sortedArray = trackingListArr.sorted { dateFormatter.date(from: $0.tSFDATE)! < dateFormatter.date(from: $1.tSFDATE)! }
Run Code Online (Sandbox Code Playgroud)

编辑 2:更改dateFormat"dd/MM/yyyy - HH:mm:ss"处理 24 小时制。