¿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]);
