使用日期格式对NSArray进行排序

时间:2015-04-09 10:02:30

标签: ios objective-c ios8 nsdateformatter

但是我没有获得当前输出,我想使用日期格式对数组进行排序,我的数组日期是字符串格式。数据是这样的

( 4月10日星期五,下午16:59, 4月10日星期五,18:37, 4月10日星期五,22:28, 4月11日星期六,下午16:59 )

所以我想要正确排序这些数据

3 个答案:

答案 0 :(得分:0)

首先重新检查你的dateFormat。使用“EE,dd MMM,HH:mm”或“EE,dd MMM,hh:mm a”。

然后你可以对数组进行排序,

- (void)sortDateStrings {

  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"EE,dd MMM,HH:mm"];

  // Input
  NSArray *dateStringArray = [NSArray arrayWithObjects:@"Fri,10 Apr,22:28", @"Sat,11 Apr,16:59", @"Fri,10 Apr,16:59", @"Fri,10 Apr,18:37", nil];

  NSArray *sortedArray = [dateStringArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    NSDate *date1 = [formatter dateFromString:obj1];
    NSDate *date2 = [formatter dateFromString:obj2];

    return [date1 compare:date2];
  }];

  NSLog(@"Original = %@", dateStringArray);
  NSLog(@"Sorted = %@", sortedArray);
}

答案 1 :(得分:0)

试试这个 -

NSString *str1 = @"Fri,10 Apr,16:59";
NSString *str2 = @"Fri,10 Apr,14:37";
NSString *str3 = @"Sat,11 Apr,16:59";    

NSArray *arr = [NSArray arrayWithObjects:str1, str2, str3, nil];
arr = [arr sortedArrayUsingFunction:dateSort context:nil];

//The date sort function
NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"EE,dd MMM,HH:mm"];

    NSDate *d1 = [formatter dateFromString:s1];
    NSDate *d2 = [formatter dateFromString:s2];

    return [d1 compare:d2]; // ascending order
    return [d2 compare:d1]; // descending order
}

查看结果截图 - enter image description here

答案 2 :(得分:0)

你可以试试这个:

NSArray *arrOfDates = [NSArray arrayWithObjects:@"Fri,10 Apr,16:59", @"Fri,10 Apr,18:37", @"Fri,10 Apr,22:28", @"Sat,11 Apr,16:59", nil];
NSMutableArray *arrOfSortedDates = [[NSMutableArray alloc]init];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE,dd MMM,HH:mm"];
for(NSString *strDate in arrOfDates){
    NSDate *formattedDate = [formatter dateFromString:strDate];
    [arrOfSortedDates addObject:formattedDate];
}

[arrOfSortedDates sortUsingSelector:@selector(compare:)];
相关问题