我有一个包含日期字符串的数组,例如
“2011 年 9 月 15 日上午 12:00:00”、“2011 年 10 月 15 日上午 12:00:00”、“2011 年 11 月 16 日上午 12:00:00”
如何按降序对该数组进行排序?顺序应该是,首先按年份,然后是月份,然后是日期,然后是时间。
请分享你的想法。谢谢
我有一个包含日期字符串的数组,例如
“2011 年 9 月 15 日上午 12:00:00”、“2011 年 10 月 15 日上午 12:00:00”、“2011 年 11 月 16 日上午 12:00:00”
如何按降序对该数组进行排序?顺序应该是,首先按年份,然后是月份,然后是日期,然后是时间。
请分享你的想法。谢谢
几乎不可能在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:)];
原来的答案就在这里!
尝试下面列出的代码。它将按升序给出排序日期。
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]);
如果它们已经是字符串,您可以将它们转换为 NSDates(因此转换为 NSTimeIntervals)并对它们进行排序,或者有效地将数字重新排列为 YYMMDDHHmmss,其中 HH 已转换为 00-23 表示。
两者都可以通过使用 sortUsingFunction 调用来完成。
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;
有一种比较两个日期的方法。
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 对象,在比较它们之后,您可以使用冒泡排序方法对数组进行排序。