【问题标题】:How to compare/sort date with array of dates in Objective C如何在Objective C中将日期与日期数组进行比较/排序
【发布时间】:2017-11-11 10:53:22
【问题描述】:

请帮帮我...

我将当前系统日期存储在变量myDatemyDate = 11 Nov 2017

现在我想从myDate 获取最后/上一个n 日期。

示例:- n = 7

myDate - 7 => 05 Nov 17

现在我得到了 date1 (currentDate) = 11 November 17 && date2 (previous n date) = 05 November 17

我从我的核心数据中获取了数据,这给了我这个日期数组:

(
    "11 November 2017",
    "10 November 2017",
    "8 November 2017",
    "5 November 2017",
    "3 November 2017",
    "1 November 2017"
)

现在我想在 date1date2 之间存储/获取日期

所以最后我应该得到这个数组:

(
        "11 November 2017",
        "10 November 2017",
        "8 November 2017",
        "5 November 2017"
 )

我该怎么做,请帮帮我。

【问题讨论】:

  • 请帮帮我...
  • 日期是NSString 还是NSDate 实例?
  • 日期在 NSString 中
  • 三个选项:1)使用NSDate(推荐)。 2) 将字符串映射到NSDate 3) 使用字符串可比较格式,例如 2017-11-5
  • 我该怎么做,因为我在从核心数据中获取时得到了 NSString 格式的日期数组。你能举个例子吗?

标签: ios objective-c nsdate


【解决方案1】:

@Aadi 试试这个..

NSMutableArray *arrOutput = [[NSMutableArray alloc]init];
    NSMutableArray *arrDates = [[NSMutableArray alloc]initWithObjects:@"11 November 2017",
                                @"10 November 2017",
                                @"8 November 2017",
                                @"5 November 2017",
                                @"3 November 2017",
                                @"1 November 2017", nil];
    NSDateFormatter *df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"dd MMMM yyyy"];
    [df setTimeZone:[NSTimeZone localTimeZone]];
    NSString *strCurrentDate = [df stringFromDate:[NSDate date]];
    NSDate *currentDate = [df dateFromString:strCurrentDate];

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    dayComponent.day = -7;
    NSDate *lastWeek = [gregorian dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];

    for(int i=0; i<arrDates.count; i++)
    {
        NSDate *dateFormArray = [df dateFromString:[arrDates objectAtIndex:i]];
        if ([dateFormArray compare:currentDate] == NSOrderedAscending && [dateFormArray compare:lastWeek] != NSOrderedAscending)
        {
            [arrOutput addObject:[arrDates objectAtIndex:i]];
        }
    }
    NSLog(@"current date = %@",strCurrentDate);
    NSLog(@"output = %@",arrOutput);

【讨论】:

  • 谢谢@Nirav,您的回答不能按我的要求工作。它将每个日期打印为前一天。假设 currentDate 是 17 年 11 月 11 日,那么它会打印 currentDate = 10 Nov 17。也与 dateFromArray 相同。 dateFrom 数组应该只有 currentDate && lastWeek 之间的日期。但它会打印 myDate 数组中的所有日期。
  • @Aadi 假设当前日期是 17 年 11 月 11 日,那么根据您的数组,输出将是 11 月 5 日、8 日和 10 日。对吧?
  • 你就在附近,请尝试一下。
  • 我已经改变了这个 --> NSLog(@"result = %@",[arrDates objectAtIndex:i]);
  • 是的,现在它是正确的,给出了想要的结果。但它仍然打印前一天的日期。它给了我 currentDate = 10 Nov 17 但应该是 11 Nov 17
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
相关资源
最近更新 更多