0

我有很多这样的时间:

(
    "2000-01-01 23:48:00 +0000",
    "2000-01-01 02:15:00 +0000",
    "2000-01-01 04:39:00 +0000",
    "2000-01-01 17:23:00 +0000",
    "2000-01-01 13:02:00 +0000",
    "2000-01-01 21:25:00 +0000"
)

这是从此代码生成的:

//loop through array and convert the string times to NSDates
                NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
                [timeFormatter setDateFormat:@"hh:mm a"];
                NSMutableArray *arrayOfDatesAsDates = [NSMutableArray array];
                for (NSObject* o in arrayTimes)
                {
                    NSLog(@"%@",o);
                    NSDate *nsDateTime = [timeFormatter dateFromString:o];
                    [arrayOfDatesAsDates addObject:nsDateTime];
                }
                NSLog(@"times array: %@", arrayOfDatesAsDates);//

我这样做是因为我试图获取下一个数组中的时间。我的计划是删除过去的时间,订购它们,然后将第一个作为下一次。

我怎样才能删除过去的?

谢谢

4

3 回答 3

5

这样的事情会做......

NSArray *dateArray = ...

NSArray *filteredArray = [dateArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSDate *date, NSDictionary *bind){
    NSComparisonResult result = [[NSDate date] compare:date];
    return result == NSOrderedAscending; 
}]];

然后,filteredArray 将是 dateArray 现在或将来的所有日期。

于 2013-07-04T21:54:44.910 回答
0

如果您在问题中的表述是正确的,那么您的时间实际上是具有类似 ISO 日期格式的字符串。

从理论上讲,这很糟糕 - 时间戳应该保持为NSDates,因为您也在暗示自己。

但是(如果您确定没有人在看),您可以利用 ISO 日期格式允许按字典顺序排序的事实。字符串“2000-01-01 21:48:00 +0000”排在“2000-01-01 23:48:00 +0000”之前,因此您所要做的就是使用代表“now”的字符串进行过滤。

NSArray *times = @[
    // ... more times
    @"2000-01-01 13:02:00 +0000",
    @"2014-01-01 13:02:00 +0000",
    @"2015-01-01 13:02:00 +0000"
];

NSString *nowString = [[NSDate date] descriptionWithLocale: nil];

NSPredicate *stringPred = [NSPredicate predicateWithFormat: @"SELF >= %@", nowString];

NSArray *filteredTimes = [times filteredArrayUsingPredicate: stringPred];

有点hacky,所以记得好好评论它。您可能还想进行一些防御性测试,以确保您的时间戳格式在将来也保持不变。请注意,如果它滑到“2015-2-3 13:02:00 +0000”之类的内容(月份和日期字段中没有前导零),它将中断,如“2015-10-15 13:02:00 +0000" 将在此之前排序。

实际上,您可能应该在读取数据后立即将时间戳转换为 NSDate 对象,在这种情况下,谓词保持不变,您只需直接传递 [NSDate date] 而不是其字符串表示形式。

于 2013-07-04T22:57:39.533 回答
0

只需将这些转换为 NSDate 对象并使用比较对数组进行排序:

于 2013-07-04T23:29:06.153 回答