2011-09-23 41 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]);