如何仅显示当前日期和过去日期JSON中的对象

时间:2013-07-08 20:00:14

标签: objective-c json

好的,这是瘦的。我对此进行了搜索,但没有发现这个问题。 (我在xcode fyi中写这个)

我的任务应该是容易的,但可能是但我开始时遇到了麻烦......

我需要下载JSON数据,它是一个只包含三个项目的对象列表,日期,项目,内容。基本上是3个字符串。日期不是创建的日期,而是整个对象的日期。用户希望能够一次预加载几周而无法让人们看到未来的日期。

我可以下载JSON数据没问题,我可以在列表中显示它,不是问题。我不确定如何使程序忽略日期不等于今天的对象。

任何人都对此有任何见解?下面是其中一个测试对象的样子。

@type: "Devotional",
@url: "http://api.storageroomapp.com/accounts/50ff0ad80f66027d84001680/collections/51c1ba270f6602499f0000ae/entries/51c1bc390f6602442c0002ec",
@collection_url: "http://api.storageroomapp.com/accounts/50ff0ad80f66027d84001680/collections/51c1ba270f6602499f0000ae",
@version: 2,
@trash: false,
@created_at: "2013-06-19T14:12:09Z",
@updated_at: "2013-07-08T19:38:51Z",
devotional_date: "2013-07-08",
devotional_title: "Test Today Devotional",
devotional_body: "This is a test of what Today's Daily Devotional would look like!"
},

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

以下是进行此比较的基本思路:

- (void)testDateIsToday {
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *now = [NSDate date];
    NSInteger dateUnits = NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;
    NSDateComponents *dateParts = [gregorian components:dateUnits fromDate:now];
    NSString *dateString = @"2013-07-08"; // Date from your JSON
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd";
    NSDate *requestedDate = [dateFormatter dateFromString:dateString];
    NSDateComponents *requestedParts = [gregorian components:dateUnits fromDate:requestedDate];

    NSLog(@"Equal? %i", [[gregorian dateFromComponents:requestedParts] compare:[gregorian dateFromComponents:dateParts]] == NSOrderedSame);
}

请注意,这将基于其运行的设备所在的时区进行比较,我猜这不会影响您,因为您没有在JSON中指定时区。使用日历和日期组件是进行此类比较的最安全的方法。