在对象中排序字符串日期

时间:2018-01-10 07:16:28

标签: swift sorting

我有表视图,其中包含" from,To,Action,Date和description"等数据。现在我将日期作为字符串格式,我需要按照从最近日期到早期日期的日期对消息进行排序,我尝试排序代码,但它只排序前两个字符。 例如: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)

}

这是结果图像 enter image description here

2 个答案:

答案 0 :(得分:3)

您正在尝试对字符串进行排序而不是日期。要对其进行正确排序,首先需要将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)!
}

编辑:紧凑闭包声明

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)! }

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

答案 1 :(得分:0)

按降序格式排序

var sortedArray = self.trackingListArr.sorted(by: { $0.tSFDATE.compare($1) == .orderedDescending })