gpt4 book ai didi

ios - iOS:按最近的年份(忽略年份)对NSDate数组进行排序

转载 作者:行者123 更新时间:2023-12-01 17:31:21 24 4
gpt4 key购买 nike

我有一个NSDate对象数组。这些对象具有年份值,但是我不在乎。我想仅使用月份和日期按最新日期对日期进行排序。因此,例如,在7月,无论这些NSDate对象中包含的年份如何,六月的日期都将接近列表的顶部,而八月的日期将接近列表的底部。

我在想办法做到这一点时遇到了麻烦。有没有人对此问题有一个好的解决方案?

谢谢!

编辑:显然我没有很清楚地解释我在寻找什么。我想对数组进行排序,以便最近的日期在第一位,而忽略年份。因此,例如,给定MM / dd / yy格式,如果今天是14/05/06,而我的数组包含以下日期:

2014年1月4日
14/04/05
14年7月21日
14/12/30

我想要的正确顺序是:

04/05
01/04
12/30
07/21

最佳答案

stated here一样,您可以获取NSDate的日期组件并按该值排序。

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];

NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

您可以忽略任何想要的值。

编辑:只是结合给出的两个答案。归功于driis作为排序代码。
NSArray* sortedArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(NSDate* lhs, NSDate* rhs)
{
NSDateComponents *lscomponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth fromDate:lhs];
NSDateComponents *rhcomponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth fromDate:rhs];
NSDateComponents *currentcomponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth fromDate:[NSDate date]];

NSInteger lday = [lscomponents day];
NSInteger lmonth = [lscomponents month];
NSInteger rday = [rhcomponents day];
NSInteger rmonth = [rhcomponents month];

if(lmonth < [currentcomponents month])
lmonth += 12;
else if(lmonth == [currentcomponents month])
{
if(lday < [currentcomponents day])
lmonth += 12;
}

if(rmonth < [currentcomponents month])
rmonth += 12;
else if(rmonth == [currentcomponents month])
{
if(rday < [currentcomponents day])
rmonth += 12;
}
int diff = lmonth - rmonth;
if (diff == 0)
diff = lday - rday;

if (diff < 0)
return NSOrderedDescending;

if (diff > 0)
return NSOrderedAscending;

return NSOrderedSame;
}];

您可以通过缓存日历来加快速度。

编辑2:

我已更新排序方式,以考虑您的自定义需求。如果月份和日期在现在之前,则将月份添加12。然后根据新的伪月份进行比较。那应该给您自定义排序今天。

关于ios - iOS:按最近的年份(忽略年份)对NSDate数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com