常见的对日期进行排序
引言:
在项目中经常需要对数据进行排序,这里模拟一个数组,由于项目中返回的json的key对应的value为空,所以排序的时候需要判断obj1和obj2是否为空,还有升序和降序的问题根据
# 一. 代码实现
- (void)test {
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"2019/03/01/",@"2013/03/02",@"2013/03/07",@"2014/03/01/", [NSNull null], nil];
array = (NSMutableArray *)[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/MM/dd/"];
if (obj1 == [NSNull null]) {
obj1 = @"0000/00/00";
}
if (obj2 == [NSNull null]) {
obj2 = @"0000/00/00";
}
NSDate *date1 = [formatter dateFromString:obj1];
NSDate *date2 = [formatter dateFromString:obj2];
NSComparisonResult result = [date1 compare:date2];
return result == NSOrderedAscending;
}];
for (int i = 0; i < [array count]; i++) {
NSLog(@"%@", [array objectAtIndex:i]);
}
}
# 二. 运行结果
return result == NSOrderedDescending;
这行代码是控制排序是 降序(NSOrderedDescending
) 、升序(NSOrderedAscending
) 还是 相等(NSOrderedSame
)
升序结果:
2017-06-16 17:16:14.930 TestH5[15888:669365] 2019/03/01/
2017-06-16 17:16:14.930 TestH5[15888:669365] 2014/03/01/
2017-06-16 17:16:14.931 TestH5[15888:669365] 2013/03/07
2017-06-16 17:16:14.931 TestH5[15888:669365] 2013/03/02
2017-06-16 17:16:14.931 TestH5[15888:669365] <null>
降序结果:
2017-06-16 17:17:21.692 TestH5[15946:671080] 2013/03/02
2017-06-16 17:17:21.692 TestH5[15946:671080] 2013/03/07
2017-06-16 17:17:21.692 TestH5[15946:671080] 2014/03/01/
2017-06-16 17:17:21.692 TestH5[15946:671080] 2019/03/01/
2017-06-16 17:17:21.692 TestH5[15946:671080] <null>