2011-09-23 62 views
0

我有一个包含日期字符串像如何包含在iPhone SDK的日期数组排序

“9/15/2011 12:00:00 AM”数组“10/15/2011 12 :00:00 AM“,”11/16/2011 12:00:00 AM“

如何按降序排列此数组? 订单应按年份先排序,然后按月排序,然后按日期排序,然后按时间排序。

请分享你的想法。 谢谢

+1

最主要的是,当它们处于NSStrings格式时,您无法对NSDates进行排序。然后,[解决方案在这里!](http://stackoverflow.com/questions/1132806/sort-nsarray-of-date-strings-or-objects/1134126#1134126) – EmptyStack

+0

感谢您的答复。我从Web服务获取日期值,那么如何将此字符串日期值转换为NSDate格式?可能吗? – Mithun

+0

我已将代码更改为NSdate,但从Web服务获取的字符串格式与“2011年11月16日12:00:00 AM”类似。我怎样才能转换这一个? – Mithun

回答

2

排序NSDates,而他们在的NSString格式几乎是不可能的,除非他们的格式为“YYYYMMDDHHMMSS”,您可以排序作为字符串进行排序。请参阅@丹尼尔·希克斯答案。

将字符串转换为NSDate解析并添加Web服务中的日期。

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:)]; 

而且original answer is here!

+0

非常感谢您的回答。再一次,我得到了答案像2011-11-15 18:30:00 +0000,但输入是11/16/2011 12:00:00 AM。日期有所不同。我认为那是因为时间格式。无论如何要以12小时的格式获得时间? – Mithun

+0

您不必担心iOS显示日期的格式。它始终显示相对于时区的日期。当您将日期转换为字符串时,您将获得正确的值。不要担心。 – EmptyStack

+0

谢谢你,非常感谢你的时间。 – Mithun

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; 
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"); 
     } 

您可以使用此方法,但请确保您的日期1和date2是NSDate的对象,并比较它们之后,你可以使用冒泡排序方法与它一起到数组排序。

1

如果它们已经是字符串,您可以将它们转换为NSDates(并因此转换为NSTimeIntervals)并对它们进行排序,或者有效地将数字重新排列为YYMMDDHHmmss,其中HH已被转换为00-23表示。

可以通过使用sortUsingFunction调用来完成。

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]);