gpt4 book ai didi

ios - NSPredicate 在两个 NSString 类型的日期之间进行过滤

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:01:56 28 4
gpt4 key购买 nike

我有一些数据(如 NSMutableArray 中的 NSDictionary),示例数据如下,

enter image description here

将每一行视为 NSDictionary,整个表是一个包含事件的 NSMutableArray

我想要两个日期之间的结果,所以我使用 NSPredicate 来过滤我的数据。


这是我的代码片段,

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Date >=  %@ AND
Date <= %@", startDate,endDate];

NSArray *filter = [arrayEvents filteredArrayUsingPredicate:predicate];

测试过滤:


案例 1:

NSString *startDate = @"01/07/14";
NSString *endDate = @"31/07/2014";

输出:所有事件(行)。


案例 2:

NSString *startDate = @"20/07/14";
NSString *endDate = @"31/07/2014";

输出:最后四个事件(行)。


案例三:

NSString *startDate = @"11/07/14";
NSString *endDate = @"20/07/2014";

输出:只有第二个事件(行)。


案例 4:

NSString *startDate = @"01/08/14";
NSString *endDate = @"31/08/2014";

输出:所有事件(行)。


结论:

Case 1, 2 and 3 is correct, where Case 4 is incorrect.


注意事项:

  • 日期类型为NSString
  • 日期格式为日-月-年(即 dd/MM/yyyy)
  • 相同的结果偶数日期格式为 - 连字符 而不是 /(正斜杠)
  • 即使我们更改日期格式月-日-年(即 MM/dd/yyyy),结果也一样

请有人帮我看看我做错了什么?有什么我想念的吗?我知道几乎没有其他问题,但没有一个对我有帮助。

最佳答案

您需要将您的数据类型更改为最新(这里甚至最有意义)。您的测试随着时间的推移而通过,因为它们完全匹配一个字符串并且您的谓词包含等于。因此,如果您只查询 < 和 >,则每个“测试”都不会返回任何结果

然后是你的片段

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Date >=  %@ AND
Date <= %@", startDate,endDate];

NSArray *filter = [arrayEvents filteredArrayUsingPredicate:predicate];

按预期工作。没有办法用字符串来做到这一点,因为它需要一个日期格式化程序来解析字符串中的日期并进行比较。这绝对是低效的。所以如果你真的想过滤这个,创建一个 NSDateFormatter 的实例并运行每个 Dictionary。找出日期并将新格式化的日期与您的开始日期和结束日期进行比较。如果它介于两者之间,则将其添加到结果数组(之前也需要创建它)。

NSMutableArray* result = [NSMutableArray array];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"dd/MM/yy";
for (NSDictionary *dict in yourArray) {
NSString *dateString = dict[@"Date"];
NSDate *date = [formatter dateFromString:dateString];
if ([date compare:startDate] > 0 && [date compare:endDate] < 0) {
[result add:dict];
}
}

//这里使用过滤后的数组

关于ios - NSPredicate 在两个 NSString 类型的日期之间进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24669902/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com