我有 TableView ,其中包含“从、到、操作、日期和描述”等数据。现在我得到的日期是字符串格式,我需要按日期从最新日期到较早日期对消息进行排序,我尝试了排序代码,但它只对前两个字符进行排序。 例如: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)
}
最佳答案
您正在尝试对字符串而不是日期进行排序。要正确排序,您首先需要将 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 小时制。
关于swift - 对对象中的字符串日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48182129/