2014-06-22 100 views
0

我有一個數組,它有一組時間戳(作爲字符串),它們按排序順序。我只想再次對它們進行排序,看看是否返回了相同的列表(原因是我將處理進一步的時間戳存儲,並需要對它們進行排序)。這裏是我的日期數組,其中時間戳基本上是字符串:sortedArrayUsingComparator返回不正確的結果

(
"Jun 18, 2014 12:00:00 AM", 
"Jun 18, 2014 12:15:00 AM", 
"Jun 18, 2014 12:30:00 AM", 
"Jun 18, 2014 12:45:00 AM", 
"Jun 18, 2014 1:00:00 AM", 
"Jun 18, 2014 1:15:00 AM", 
"Jun 18, 2014 1:30:00 AM", 
"Jun 18, 2014 1:45:00 AM", 
"Jun 18, 2014 2:00:00 AM", 
"Jun 18, 2014 2:15:00 AM", 
"Jun 18, 2014 2:30:00 AM", 
"Jun 18, 2014 2:45:00 AM", 
"Jun 18, 2014 3:00:00 AM", 
"Jun 18, 2014 3:15:00 AM", 
"Jun 18, 2014 3:30:00 AM", 
"Jun 18, 2014 4:15:00 AM", 
"Jun 18, 2014 4:30:00 AM", 
"Jun 18, 2014 4:45:00 AM", 
"Jun 18, 2014 5:15:00 AM", 
"Jun 18, 2014 5:30:00 AM", 
"Jun 18, 2014 5:45:00 AM", 
"Jun 18, 2014 6:00:00 AM", 
"Jun 18, 2014 6:15:00 AM", 
"Jun 18, 2014 6:30:00 AM", 
"Jun 18, 2014 6:45:00 AM", 
"Jun 18, 2014 7:00:00 AM", 
"Jun 18, 2014 7:15:00 AM", 
"Jun 18, 2014 7:30:00 AM", 
"Jun 18, 2014 7:45:00 AM", 
"Jun 18, 2014 8:00:00 AM", 
"Jun 18, 2014 8:15:00 AM", 
"Jun 18, 2014 8:30:00 AM", 
"Jun 18, 2014 8:45:00 AM", 
"Jun 18, 2014 9:00:00 AM", 
"Jun 18, 2014 9:15:00 AM", 
"Jun 18, 2014 10:00:00 AM", 
"Jun 18, 2014 10:15:00 AM", 
"Jun 18, 2014 10:30:00 AM", 
"Jun 18, 2014 10:45:00 AM", 
"Jun 18, 2014 11:15:00 AM", 
"Jun 18, 2014 11:30:00 AM", 
"Jun 18, 2014 11:45:00 AM", 
"Jun 18, 2014 12:00:00 PM", 
"Jun 18, 2014 12:15:00 PM", 
"Jun 18, 2014 12:30:00 PM", 
"Jun 18, 2014 12:45:00 PM", 
"Jun 18, 2014 1:00:00 PM", 
"Jun 18, 2014 1:15:00 PM", 
"Jun 18, 2014 1:30:00 PM", 
"Jun 18, 2014 2:00:00 PM", 
"Jun 18, 2014 2:15:00 PM", 
"Jun 18, 2014 2:30:00 PM", 
"Jun 18, 2014 2:45:00 PM", 
"Jun 18, 2014 3:00:00 PM", 
"Jun 18, 2014 3:15:00 PM", 
"Jun 18, 2014 3:45:00 PM", 
"Jun 18, 2014 4:00:00 PM", 
"Jun 18, 2014 4:15:00 PM", 
"Jun 18, 2014 4:45:00 PM", 
"Jun 18, 2014 5:15:00 PM", 
"Jun 18, 2014 5:30:00 PM", 
"Jun 18, 2014 6:00:00 PM", 
"Jun 18, 2014 6:15:00 PM", 
"Jun 18, 2014 7:00:00 PM", 
"Jun 18, 2014 7:15:00 PM", 
"Jun 18, 2014 7:30:00 PM", 
"Jun 18, 2014 8:00:00 PM", 
"Jun 18, 2014 8:15:00 PM", 
"Jun 18, 2014 8:30:00 PM", 
"Jun 18, 2014 9:15:00 PM", 
"Jun 18, 2014 9:30:00 PM", 
"Jun 18, 2014 9:45:00 PM", 
"Jun 18, 2014 10:15:00 PM", 
"Jun 18, 2014 10:30:00 PM", 
"Jun 18, 2014 11:15:00 PM", 
"Jun 18, 2014 11:30:00 PM", 
"Jun 18, 2014 11:45:00 PM" 
) 

上面的數組是在排序的時間戳。現在,如果我按升序對它們重新排序,他們應該給我同樣的結果,但我得到的結果是失序的。我只是不明白,爲什麼我看到這樣的現象: 這是我得到的輸出:

sorted dates = (
"Jun 18, 2014 12:00:00 AM", 
"Jun 18, 2014 1:00:00 AM", 
"Jun 18, 2014 2:00:00 AM", 
"Jun 18, 2014 3:00:00 AM", 
"Jun 18, 2014 6:00:00 AM", 
"Jun 18, 2014 7:00:00 AM", 
"Jun 18, 2014 8:00:00 AM", 
"Jun 18, 2014 9:00:00 AM", 
"Jun 18, 2014 10:00:00 AM", 
"Jun 18, 2014 12:15:00 AM", 
"Jun 18, 2014 1:15:00 AM", 
"Jun 18, 2014 2:15:00 AM", 
"Jun 18, 2014 3:15:00 AM", 
"Jun 18, 2014 4:15:00 AM", 
"Jun 18, 2014 5:15:00 AM", 
"Jun 18, 2014 6:15:00 AM", 
"Jun 18, 2014 7:15:00 AM", 
"Jun 18, 2014 8:15:00 AM", 
"Jun 18, 2014 9:15:00 AM", 
"Jun 18, 2014 10:15:00 AM", 
"Jun 18, 2014 11:15:00 AM", 
"Jun 18, 2014 12:30:00 AM", 
"Jun 18, 2014 1:30:00 AM", 
"Jun 18, 2014 2:30:00 AM", 
"Jun 18, 2014 3:30:00 AM", 
"Jun 18, 2014 4:30:00 AM", 
"Jun 18, 2014 5:30:00 AM", 
"Jun 18, 2014 6:30:00 AM", 
"Jun 18, 2014 7:30:00 AM", 
"Jun 18, 2014 8:30:00 AM", 
"Jun 18, 2014 10:30:00 AM", 
"Jun 18, 2014 11:30:00 AM", 
"Jun 18, 2014 12:45:00 AM", 
"Jun 18, 2014 1:45:00 AM", 
"Jun 18, 2014 2:45:00 AM", 
"Jun 18, 2014 4:45:00 AM", 
"Jun 18, 2014 5:45:00 AM", 
"Jun 18, 2014 6:45:00 AM", 
"Jun 18, 2014 7:45:00 AM", 
"Jun 18, 2014 8:45:00 AM", 
"Jun 18, 2014 10:45:00 AM", 
"Jun 18, 2014 11:45:00 AM", 
"Jun 18, 2014 12:00:00 PM", 
"Jun 18, 2014 1:00:00 PM", 
"Jun 18, 2014 2:00:00 PM", 
"Jun 18, 2014 3:00:00 PM", 
"Jun 18, 2014 4:00:00 PM", 
"Jun 18, 2014 6:00:00 PM", 
"Jun 18, 2014 7:00:00 PM", 
"Jun 18, 2014 8:00:00 PM", 
"Jun 18, 2014 12:15:00 PM", 
"Jun 18, 2014 1:15:00 PM", 
"Jun 18, 2014 2:15:00 PM", 
"Jun 18, 2014 3:15:00 PM", 
"Jun 18, 2014 4:15:00 PM", 
"Jun 18, 2014 5:15:00 PM", 
"Jun 18, 2014 6:15:00 PM", 
"Jun 18, 2014 7:15:00 PM", 
"Jun 18, 2014 8:15:00 PM", 
"Jun 18, 2014 9:15:00 PM", 
"Jun 18, 2014 10:15:00 PM", 
"Jun 18, 2014 11:15:00 PM", 
"Jun 18, 2014 12:30:00 PM", 
"Jun 18, 2014 1:30:00 PM", 
"Jun 18, 2014 2:30:00 PM", 
"Jun 18, 2014 5:30:00 PM", 
"Jun 18, 2014 7:30:00 PM", 
"Jun 18, 2014 8:30:00 PM", 
"Jun 18, 2014 9:30:00 PM", 
"Jun 18, 2014 10:30:00 PM", 
"Jun 18, 2014 11:30:00 PM", 
"Jun 18, 2014 12:45:00 PM", 
"Jun 18, 2014 2:45:00 PM", 
"Jun 18, 2014 3:45:00 PM", 
"Jun 18, 2014 4:45:00 PM", 
"Jun 18, 2014 9:45:00 PM", 
"Jun 18, 2014 11:45:00 PM" 
) 

例如,爲什麼會「2014年6月18日上午12點15分00秒」,顯示「2014年6月18日1:00:00 AM」之後?我只是沒有得到這部分!

這裏是我的代碼:

-(void)sortDates { 
NSDateFormatter *dateFormatter; 

dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMM dd, yyyy HH:mm:ss a"]; 

NSLog(@"%@", xAxisDataWithDate); 
NSArray *sortedTimes = [xAxisDataWithDate sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) 
{ 
    NSDate *date1 = [dateFormatter dateFromString:obj1]; 
    NSDate *date2 = [dateFormatter dateFromString:obj2]; 
    return [date1 compare:date2]; 
}]; 
NSLog(@"sorted dates = %@", sortedTimes); 
} 

我還寫了一個示例程序包含這些日期的一個子集,它似乎給我錯誤的結果時1:00:00 AM。是數組中存在的( 1:00:00 AM。應該被存儲之後12:00:00 AM):

-(void)sortDates { 
NSDateFormatter *dateFormatter; 

dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMM dd, yyyy HH:mm:ss a"]; 

NSMutableArray *times = [[NSMutableArray alloc]initWithObjects:@"Jun 19, 2014 11:45:00 PM", @"Jun 18, 2014 1:00:00 AM", @"Jun 18, 2014 12:15:00 AM",@"Jun 18, 2014 12:00:00 AM", nil]; 
NSArray *sortedTimes = [times sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) 
{ 
    NSDate *date1 = [dateFormatter dateFromString:obj1]; 
    NSDate *date2 = [dateFormatter dateFromString:obj2]; 
    return [date1 compare:date2]; 
}]; 
NSLog(@"sorted dates = %@", sortedTimes); 
} 

輸出:

sorted dates = (
"Jun 18, 2014 1:00:00 AM", 
"Jun 18, 2014 12:00:00 AM", 
"Jun 18, 2014 12:15:00 AM", 
"Jun 19, 2014 11:45:00 PM" 
) 

我無法弄清楚爲什麼我失序的結果w.r.t NSMutableArray * xAxisDataWithDate和w.r.t NSMutableArray *次!請在這方面幫助我!讚賞。

+0

由於您在AM/PM中使用1-12,因此您應該使用「hh」作爲小時。 「HH」是0-23。另外,一定要將日期格式的語言環境設置爲某種標準語言環境(可能是'[[NSLocale alloc] initWithLocaleIdentifier:@「en_US」]'),而不是讓它接收系統區域設置,因爲這會變化。所有這些說,你應該使用日期對象來開始,而不是字符串。 –

+0

此外,請嘗試記錄您的格式化程序給出的兩個字符串的'NSDate'對象,這些對象最終會相對於彼此錯誤地進行排序。看看它是如何解釋這些字符串的。 –

+0

謝謝你肯。這對我有用!非常感謝您的幫助。 – Rahul

回答

0

你似乎有一個錯誤的格式,時間顯示爲12小時格式,更改格式MMM dd, yyyy hh:mm:ss alowercase "h"

"Jun 18, 2014 12:00:00 AM", 
"Jun 18, 2014 12:15:00 AM", 
"Jun 18, 2014 1:00:00 AM", 
"Jun 19, 2014 11:45:00 PM" 

更重要的是,你應該字符串轉換爲日期之前相比,sortedArray…因此您將字符串轉換爲日期n log n次而不是n

+1

謝謝Sasha。 – Rahul