¿Qué encontrarás en este post?
ToggleCreate a NSDate from its components (day, month, year)
You don’t use a init method in NSDate, instead, you use a method of NSCalendar (dateFromComponents:): Method that initializes a NSDate form an ISO 8601 date representation (YYYYMMDD):-(id) initWithISO8601Date: (NSString *) iso8601Date{ // Takes a date in the YYYYMMDD form if ([iso8601Date length] == 8 ) { int year = [[iso8601Date substringWithRange:NSMakeRange(0, 4)] integerValue]; int month = [[iso8601Date substringWithRange:NSMakeRange(4, 2)] integerValue]; int day = [[iso8601Date substringWithRange:NSMakeRange(6,2)] integerValue]; NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setYear:year]; [comps setMonth:month]; [comps setDay:day]; NSCalendar *cal = [NSCalendar currentCalendar]; [cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; self = [cal dateFromComponents:comps]; [comps release]; }else{ self = nil; [NSException raise:@"Wrong ISO8601 format" format:@"Should be in YYYYMMDD format, instead got %@", iso8601Date]; } return self; }
Tokenize a NSDate into its components (day, month, year, etc…)
You also use a method form NSCalendar(components:fromDate):NSDate *today = [[[NSDatealloc] init] autorelease]; NSDateComponents *tokens = [[NSCalendarcurrentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:today]; NSLog(@"%d %d %d", [tokens year], [tokens month], [tokens day]);
Tokenize the difference between 2 dates into its components (day, month, year, etc…)
Use a similar method from NSCalendar: components:fromDate:toDate:options:NSDate *today = [[[NSDatealloc] init] autorelease]; NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease]; [comps setYear:1970]; [comps setMonth:1]; [comps setDay:7]; NSCalendar *cal = [NSCalendarcurrentCalendar]; [cal setTimeZone: [NSTimeZonetimeZoneWithAbbreviation:@"GMT"]]; NSDate *daysOfOld = [cal dateFromComponents:comps]; comps = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:daysOfOld toDate:today options:0]; NSLog(@"You are a %d years %d months %d days %d hours %d minutes and %d seconds old fart!", [comps year], [comps month], [comps day], [comps hour], [comps minute], [comps second]);