我有表视图,其中包含" 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)
}
答案 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 })