3

我正在为一个对象设置一个 timeStamp 属性。现在我只是在使用[NSDate date]. 用户每天可能创建 10 个对象。但在 UI 中,我想按日期删除它们。因此,每一天都会显示为当天创建的所有对象。我怎样才能做到这一点?现在它正在尝试匹配日期和时间等。

Example: 
Obj1 - 2/5/12 5pm
Obj2 - 2/5/12 12pm
Obj3 - 2/4/12 6pm
Obj4 - 2/1/12 1pm

我需要能够按天对它们进行分组,一个用于 2/5、2/4 和 2/1。

4

2 回答 2

4

您可以使用 NSDateComponents 类来直接访问 NSDate 实例的日、月和年。

NSDate *someDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit fromDate:someDate];

NSLog(@"Year: %d", [components year]);
NSLog(@"Month: %d", [components month]);
NSLog(@"Day: %d", [components day]);

这是一个 NSDateComponents 比较方法:

- (BOOL)isFirstCalendarDate:(NSDateComponents *)first beforeSecondCalendarDate:(NSDateComponents *)second
{
    if ([first year] < [second year]) {
        return YES;
    } else if ([first year] == [second year]) {
        if ([first month] < [second month]) {
            return YES;
        } else if ([first month] == [second month]) {
            if ([first day] < [second day]) {
                return YES;
            }
        }
    }
    return NO;
}

我没有测试过 NSDateComponents 比较方法;它将受益于单元测试。

于 2012-02-06T02:41:44.577 回答
1

你的问题的表述相当广泛。要获取NSDate对象的日期部分,作为NSString,您可以使用:

NSDate *dateIn = [NSDate date];

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"yyyy-MM-dd"];
NSString *stringOut = [fmt stringFromDate:dateIn];
[fmt release];

您可以轻松更改日期格式。如果您经常调用此代码(例如在循环中),您可能只想分配和设置日期格式化程序一次。

于 2012-02-06T00:56:19.587 回答