我有一个包含日期字符串的数组,如
“9/15/2011 12:00:00 AM”,“10/15/2011 12:00:00 AM”,“11/16/2011 12:00:00 AM”
如何按降序对此数组进行排序? 订单应按年份排序,按年份,按月,然后按日期再按时间排序。
请分享您的想法。 谢谢
答案 0 :(得分:2)
NSDates 在 NSString 格式中排序几乎是不可能的,除非它们的格式为“YYYYMMddHHmmss”,你可以排序为排序字符串。请参阅 @Daniel R Hicks 答案。
在解析并从Web服务添加日期时,将字符串转换为 NSDate 。
NSString *dateStr = ...
NSDateFormatter *df = ;[NSDateFormatter alloc] init];
[df setDateFormat:@"M/dd/YYYY hh:mm:ss a"];
[datesArray addObject:[df dateFromString:dateStr]];
排序,
[datesArray sortUsingSelector:@selector(compare:)];
答案 1 :(得分:2)
尝试下面列出的代码。它会按升序给出排序日期。
NSMutableArray *arraydate=[[NSMutableArray alloc] init];
[arraydate addObject:@"22/7/2010"];
[arraydate addObject:@"1/1/1988"];
[arraydate addObject:@"22/7/1966"];
[arraydate addObject:@"22/7/2000"];
[arraydate addObject:@"1/7/2010"];
[arraydate sortUsingSelector:@selector(compare:)];
NSLog(@"array=%@",[arraydate description]);
答案 2 :(得分:1)
如果它们已经是字符串,你可以将它们转换为NSDates(从而转换为NSTimeIntervals)并对它们进行排序,或者有效地将数字重新排列为YYMMDDHHmmss,其中HH已被转换为00-23表示。
可以使用sortUsingFunction调用来完成。
答案 3 :(得分:0)
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSLocale *currentLocale = [NSLocale currentLocale];
NSArray *sortArray = [iArray sortedArrayUsingComparator:^(id string1, id string2) {
NSRange string1Range = NSMakeRange(0, [string1 length]);
//if([string2 isEqualToString:@"#"])
//return -1;
return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
}];
return sortArray;
答案 4 :(得分:0)
有一种比较两个日期的方法。
int interval = [date1 compare:date2];
if (interval == 1)
{
NSLog(@"Right hand side date is earlier");
}
else if (interval == -1)
{
NSLog(@"Left hand side date is earlier");
}
else
{
NSLog(@"Both Dates are equal");
}
您可以使用此方法但请确保您的date1和date2是NSDate对象,并且在比较它们之后,您可以使用气泡排序方法对其进行排序。