0

好吧,这里是瘦子。我已经对此进行了搜索,但还没有找到完全正确的问题。(我在 xcode 中写这个仅供参考)

我的任务应该是简单的,而且可能是,但我在开始时遇到了麻烦......

我需要下载 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!"
},

提前感谢您的帮助。

4

1 回答 1

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 中指定时区。使用日历和日期组件是进行此类比较的最安全方法。

于 2013-07-08T23:58:12.930 回答