将日期字符串与NSPredicate进行比较

时间:2012-03-25 22:23:41

标签: iphone objective-c ios

我想知道是否有使用按日期排序的NSPredicate来过滤集合,其中日期是NSString(即3月24日)格式的MMMM dd(它不是NSDate )。

3 个答案:

答案 0 :(得分:4)

如果您将日期作为字符串存储在CoreData中,则谓词很简单。

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"theDate like %@", theDateString];

但我猜测日期存储为NSDate对象。请查看使用NSDateFormatter将您的字符串转换为NSDate。

NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MMMM dd"];
NSDate* theDate = [df dateFromString:theDateString];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SomeDate >= %@", theDate];

答案 1 :(得分:1)

首先需要将其转换为NSDate,您可以使用NSPredicate的predicateWithBlock函数实现。转换对象并在谓词块中对其进行测试。我从来没有亲自使用它,所以这个答案是理论上的。

答案 2 :(得分:0)

将NSArray中的NSDate或日期与Swift中的NSPredicate进行比较。

在Swift 2.1或2.0中:

//format data
let Formata_Data = NSDateFormatter()
Formata_Data.calendar = NSCalendar.currentCalendar()
Formata_Data.dateFormat = "dd/MM/yyyy"
let _data_filtro = Formata_Data.stringFromDate(dias_filtros!)
let _data_hoje = Formata_Data.stringFromDate(NSDate())

let data_filtro_ns = Formata_Data.dateFromString(_data_filtro)

print("DATA.... \(_data_filtro)")

var predicate_Data = NSPredicate(block: { (data_string, Orcs) -> Bool in
    return data_filtro_ns?.earlierDate(Formata_Data.dateFromString(data_string) as! String)!) == data_filtro_ns
})
var array_filtro_dias = Orcamentos.filteredArrayUsingPredicate(predicate_Data)
Orcamentos = array_filtro_dias