Swift 核心数据按日期和时间获取存储为字符串并排序

Swift CoreDate Fetch by Date and Time Stored as String and Sort

在 CoreDate Table 中,我将日期和时间存储为以下格式的字符串 我有一个特定的理由存储为一个字符串。

static let DateFmtVal = "dd-MM-yyyy";
static let TimeFmtVal = "hh:mm a";

现在,在获取时,我想通过将字符串转换为日期和时间来排序,并排序以显示在 TableView 中,因此较新的行排在最前面

let DateSortVar = NSSortDescriptor(key: DateCol, ascending: false)
let TimeSortVar = NSSortDescriptor(key: TimeCol, ascending: false)
fetchedResultsController.fetchRequest.sortDescriptors = [DateSortVar, TimeSortVar]

在 Android 中,使用 SQLite 我得到的解决方案是:

SqlQryVar = "SELECT * FROM " + NamTblVal +
                        " ORDER BY STRFTIME('%d-%m-%Y %h:%i'," + DateCol + "|| ' ' ||" + TimeCol + ") DESC;";

请帮助我在 Swift

中做同样的事情

您可以将 Date 类型的计算 属性 添加到您的 CoreData 对象(在您的子类中),在那里进行转换并仅将其传递给排序描述符,您将获得与您的相同的行为Android 应用程序,但要考虑到 iOS 与 Android 的不同之处在于 iOS 中将字符串转换为日期很慢!!!并且分配多个 DateFormatters 是昂贵的(但您可以使用一个来进行所有转换)。因此,如果您没有很多日期,那么它可能适合您,无论如何,如果您想要获得正确排序的数据,那么您将不得不在某个时候进行转换。 另一种不转换为日期的解决方案是考虑对日期列使用其他格式,即 "yyyy-mm-dd" 然后字符串排序将匹配日期。