按顺序排序NSDate而忽略时间

时间:2010-12-04 20:50:00

标签: objective-c nsdate

我只想在他们的日期和年份对NSDates数组进行排序,而不是在任何单位时间。我怎么能这样做是因为我看不到将NsDate的各个部分“取出”的方法。

1 个答案:

答案 0 :(得分:4)

有关对包含NSDate对象的数组进行排序,请参阅此文章:

Sort NSArray of date strings or objects

并且我要去除时间:

Truncate NSDate (Zero-out time)

<强> ADDITION

1)循环遍历NSDate对象数组,删除(归零)时间组件,并将它们添加到新数组中:

NSMutableArray *newDateArray = [NSMutableArray array];
for (NSDate *d in myDateArray)
{
    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [calendar components:flags fromDate:d];
    //Taking the time zone into account
    NSDate *dateOnly = [[calendar dateFromComponents:components] dateByAddingTimeInterval:[[NSTimeZone localTimeZone]secondsFromGMT]];
    [newDateArray addObject:dateOnly];
}

2)既然您有一个由具有零时间组件的NSDate对象组成的新数组,您可以对它们进行排序:

[newDateArray sortUsingSelector:@selector(compare:)];

该行使用NSDate对象自己的比较器方法对数组进行排序。