Swift 对对象中的字符串日期进行排序
我有一个表视图,其中包含诸如“from、To、Action、Date和description”之类的数据。现在我得到的是字符串格式的日期,我需要按日期对消息进行排序,从最近的日期到更早的日期,我尝试了排序代码,但它只对前两个字符进行排序。 例如:tSFDATE具有字符串“11/01/2010”、“01/02/2010”。结果将是 “2010年2月1日”、“2010年1月11日”。 那么,有没有按日期对TrackObj排序的解决方案Swift 对对象中的字符串日期进行排序,swift,sorting,Swift,Sorting,我有一个表视图,其中包含诸如“from、To、Action、Date和description”之类的数据。现在我得到的是字符串格式的日期,我需要按日期对消息进行排序,从最近的日期到更早的日期,我尝试了排序代码,但它只对前两个字符进行排序。 例如:tSFDATE具有字符串“11/01/2010”、“01/02/2010”。结果将是 “2010年2月1日”、“2010年1月11日”。 那么,有没有按日期对TrackObj排序的解决方案 func tableView(_ tableView:
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)
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{let cell=tableView.dequeueReusableCell(标识符为:“myCell”,for:indexath)作为!TrackingTableViewCell
让dateFormatter=dateFormatter()
dateFormatter.dateFormat=“dd/MM/yyyy-hh:MM:ss”
让sortedArray=self.trackingListArr.sorted{dateFormatter.date(from:$0.tSFDATE!)!
这是结果图像
按降序格式对数组排序
var sortedArray=self.trackingListArr.sorted(按:{$0.tSFDATE.compare($1)==.orderedDescending})
按降序格式对数组排序
var sortedArray=self.trackingListArr.sorted(按:{$0.tSFDATE.compare($1)==.ordereddescenting})
您正在尝试对字符串而不是日期进行排序。要正确排序,首先需要将tSFDATE
字符串转换为Date
,然后对其进行排序
这应该适用于您现有的阵列
let dateFormatter=dateFormatter()
dateFormatter.dateFormat=“dd/MM/yyyy-HH:MM:ss”
让sortedArray=trackingListArr.sorted{(lhs:trackingListArr,rhs:trackingListArr)->Bool-in
//你可以在这里有额外的代码
return dateFormatter.date(from:lhs.tSFDATE)!>dateFormatter.date(from:rhs.tSFDATE)!
}
编辑:压缩闭包声明
let dateFormatter=dateFormatter()
dateFormatter.dateFormat=“dd/MM/yyyy-HH:MM:ss”
让sortedArray=trackingListArr.sorted{dateFormatter.date(from:$0.tSFDATE)!
编辑2:将
dateFormat
更改为“dd/MM/yyyy-HH:MM:ss”
以处理24小时时间。您正在尝试对字符串而不是日期进行排序。要正确排序,首先需要将tSFDATE
字符串转换为Date
,然后对其进行排序
这应该适用于您现有的阵列
let dateFormatter=dateFormatter()
dateFormatter.dateFormat=“dd/MM/yyyy-HH:MM:ss”
让sortedArray=trackingListArr.sorted{(lhs:trackingListArr,rhs:trackingListArr)->Bool-in
//你可以在这里有额外的代码
return dateFormatter.date(from:lhs.tSFDATE)!>dateFormatter.date(from:rhs.tSFDATE)!
}
编辑:压缩闭包声明
let dateFormatter=dateFormatter()
dateFormatter.dateFormat=“dd/MM/yyyy-HH:MM:ss”
让sortedArray=trackingListArr.sorted{dateFormatter.date(from:$0.tSFDATE)!
编辑2:将
dateFormat
更改为“dd/MM/yyyy-HH:MM:ss”
以处理24小时时间。使用。改为使用比较进行日期比较。类似于date1.compare(date2)==。orderedAscending@koropok你能给我代码吗,因为我试过了,但我相信我的代码字符串有问题,表示日期的代码字符串只有在格式为yyyy-MM-dd
(首先year
然后month
然后day
)时才能可靠排序。如果不可能,您必须将日期字符串转换为date
。请改用.compare进行日期比较。类似于date1.compare(date2)==。orderedAscending@koropok你能给我代码吗,因为我试过了,但我相信我的代码字符串有问题,表示日期的代码字符串只有在格式为yyyy-MM-dd
(首先year
然后month
然后day
)时才能可靠排序。如果不可能,您必须将日期字符串转换为date
。它返回相同的结果,只需对前2个字符进行排序。是否从该函数中对该数组进行排序?由于此表视图函数调用多次。无法工作。排序字符串与排序日期不同。它返回相同的结果,只对前2个字符进行排序。是否从该函数中对该数组进行排序?由于此表视图函数调用多次。无法工作。排序字符串与排序日期不同。您所说的示例Whoops是什么意思。这就是我用来测试代码的结构。我现在已经修复并更新了答案。这很奇怪,你是有错误还是排序不正确?我编辑了我的问题,并附上了你的代码和我更改的截图“你说的例子是什么意思。这就是我用来测试代码的结构。我现在已经修复并更新了答案。这很奇怪,你是有错误还是排序不正确?我编辑了我的问题并附上了你的代码和截图我更改了”