2012-02-06 88 views
3

我正在设置一个对象的timeStamp属性。现在我只使用[NSDate date]。用户可能每天创建10个对象。但在UI中,我想按日期放弃它们。所以每一天都会显示当天创建的所有对象。我怎样才能做到这一点?现在它试图匹配我需要能够组那些天,一为2/5,2/4,2/1的日期和时间等如何按天分组NSDate对象?

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

回答

1

你的问题制定得相当广泛。为了得到一个NSDate对象的日期部分,为NSString,你可以使用:

NSDate *dateIn = [NSDate date]; 

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

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

+0

我知道该做什么,但我怎么能比较它们?所以,即使我有Obj1 - 2/5/12 5pm Obj2 - 2/5/12 12pm ..我可以截断时间并使用@“yyyy-MM-dd”格式将它们组合在一起? – Jon 2012-02-06 01:12:52

+0

使用这种格式,你实际上只采用日期;没有必要“截断时间”。 – mvds 2012-02-06 01:45:37

3

可以使用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比较方法;它会受益于单元测试。