티스토리 뷰

[Xcode에서 Obj-C] Foundation - 날짜,시간 클래스

NSDateComponents 객체 생성

기본메서드

getter

setter 

설명 

 

getter 

setter 

설명 

year 

setYear:

년 

 

minute 

setMinute: 

분 

month 

setMonth: 

 

second 

setSecond: 

초 

day 

setDay: 

일 

 

week 

setWeek: 

주 

hour 

setHour: 

시 

 

weekday 

setWeekday: 

요일 


NSDateComponents *comps = [[NSDateComponents alloc] init];

[comps setYear:2017];

[comps setMonth:2];

[comps setDay:21];


NSDateComponents 객체 생성시 모든 메서드를 설정할 필요는 없다. 

설정되지 않으면 NSUndefinedDateComponent 라는 상태를 나타내는 값이 된다.


NSCalendar 객체 생성

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];


메서드 

initWithCalendarIdentifier: 

형식 

- (id) initWithCalendarIdentifier: (NSCalendarIdentifier) ident;

설명 

NSCalendar를 지정한 캘린더로 초기화


NSCalendar와 NSDateComponents를 사용해 NSDate 객체 생성

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:2017];
[comps setMonth:2];
[comps setDay:21];
NSDate *date = [cal dateFromComponents:comps];

NSLog(@"%@", date);
// 2017-02-20 00:00:00 +0900


메서드 

dateFromComponents: 

형식 

- (NSDate *) dateFromComponents: (NSDateComponents *) comp;

설명 

지정한 NSDateComponents 객체로부터 NSDate 객체를 생성


NSDate를 NSDateComponents 객체 생성

NSArray *weekday = [NSArray arrayWithObjects:@"SUN", @"MON", @"TUE", @"WED", @"THU", @"FRI", @"SAT", nil];

NSDate *today = [NSDate date];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit;
NSDateComponents *comps = [cal components:flags fromDate:today];

NSLog(@"year: %d", [comps year]);  // year: 2017
NSLog(@"month: %d", [comps month]);  // month: 2
NSLog(@"day: %d", [comps day]);  // day: 20
NSLog(@"weekday: %d", [weekday objectAtIndex:[comps weekday] - 1]); // weekday: TUE


메서드 

components:fromDate: 

형식 

- (NSDateComponents *) components: (NSUinteger) unitFlags fromDate: (NSDate *) date;

설명 

NSDate 객체로부터 지정한 필드를 가진 NSDateComponents를 생성


■ unitFlags 값


의미 

값 

의미 

NSEraCalendarUnit 

시대 

NSYearCalendarUnit 

연도 

NSMonthCalendarUnit 

월 

NSDayCalendarUnit 

일 

NSHourCalendarUnit 

시 

NSMinuteCalendarUnit 

분 

NSSecondCalendarUnit 

초 

NSWeekCalendarUnit 

주 

NSWeekdayCalendarUnit 

요일 

 

 


■ unitFlags 값의 중복처리


NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;


날짜 계산 예시

1년 후의 요일 구하기

NSArray *weekday = [NSArray arrayWithObjects:@"SUN", @"MON", @"TUE", @"WED", @"THU", @"FRI", @"SAT", nil];

NSDate *today = [NSDate date];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *oneYear = [[NSDateComponents alloc] init];
[oneYear setYear: 1];
NSDate *newDate = [cal dateByAddingComponents:oneYear toDate:today options:0];

NSDateComponents *oneYearComp = [cal components:NSWeekdayCalendarUnit fromDate:newDate];

NSLog(@"%@", [weekdays objectAtIndex:[oneYearComp weekday] - 1]);
// WED

메서드 

dateByAddingComponents:toDate:options: 

형식 

- (NSDate *) dateByAddingComponents: (NSDateComponents *) comps toDate: (NSDate *) date options:(NSInteger)opts;

설명 

NSDate 객체에 NSDateComponents 객체의 차이를 더해 새로운 NSDate 객체 반환

올해의 남은 일수 구하기

NSDate *today = [NSDate date];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSInteger thisYear = [[cal components:NSYearCalendarUnit fromDate:today] year];

NSDateComponents *newYearDayComp = [[NSDateCOmponents alloc] init];
[newYearDayComp setYear:thisYear + 1];
[newYearDayComp setMonth:1];
[newYearDayComp setDay:1];

NSDate *newYearDay = [cal dateFromComponents:newYearDayComp];
NSDateComponents *diff = [cal components:NSDayCalendarUnit fromDate:today toDate:newYearDay options:0];

NSLog(@"%d day.", [diff day]);


메서드 

components:fromDate:toDate:options: 

형식 

- (NSDateComponents *) components: (NSInteger) unitFlags fromDate: (NSDate *) startDate toDate: (NSDate *) endDate

설명 

fromDate와 toDate로 지정한 2개의 NSDate 객체의 차이를 나타내는 NSDateComponents 객체 생성


지정한 달의 일수 구하기

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *theDay = [[NSDateComponents alloc] init];

[theDay setYear:year];
[theDay setMonth:month + 1];
[theDay setDay:0];

NSDate *date = [cal dateFromComponents:theDay];
NSDateComponents *new = [cal components:NSDayCalendarUnit fromDate:date];
NSLog(@"year:%d month:%d -> %ddays", year, month, [new day]);

다음달 0일로 설정하면 구하려는 달의 마지막 날을 구할 수 있다.




개인적으로 공부하며 기억하기 위해 작성한 포스팅입니다.

이득을 위하여 작성된 포스팅이 아님을 알려드립니다.


댓글