BIBI BLOG
[Objective-C]NSDate와 날짜다루기 본문
■NSDate의 기본
○현재 날짜와 시간(GMT단위)
NSDate* date = [NSDate date];
NSLog(@"%@",date);
○현재 날짜와 시간(Locale단위)
NSDate* date = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
NSLog(@"%@",date);
○지정한 날짜의 인스턴스 생성하기(문자열 그대로의 시간)
NSString* dateString = @"yyyy-MM-dd HH:mm:ss";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; // 타임존 지정
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"date: %@",date);
--------------------------------예제--------------------------------
NSString* dateString = @"2020-10-04 15:45:00";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"date: %@",date);
→2020-10-04 15:45:00
○지정한 날짜의 인스턴스 생성하기(GMT시간으로 바꾸는 경우)
NSString* dateString = @"yyyy-MM-dd HH:mm:ss";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:60 * 60 * 9]]; // 타임존 지정
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"date: %@",date);
--------------------------------예제--------------------------------
NSString* dateString = @"2020-10-04 15:45:00";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:60 * 60 * 9]]; //서울시간은 9시간 차이
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"date: %@",date);
→2020-10-04 06:45:00
■날짜 포맷하기
○포맷인스턴스 만들기
NSDateFormatter *변수 = [NSDateFormatter alloc];
○날짜 포맷해보기
NSDateFormatter *fmt = [NSDateFormatter alloc] init];
[fmt setDateFormat:@"《NSString*》"];
NSString* 변수 = [fmt stringFromDate:《NSDate*》];
--------------------------------예제--------------------------------
NSDate* date = [NSDate date];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"<Y><M><d>"];
NSLog(@"%@",[fmt stringFromDate:date]);
→<2020><10><4>
※날짜 포맷 기호
G : 시대 (AD)
yy : 년 (2자리 표기) 예: 12
yyyy : 년 (4자리 표기) 예:2020
M : 월 (1자리 표기) 예: 1~12
MM : 월 (2자리 표기) 예:01~12
MMM : 월 (약어) 예: Oct
MMMM : 월 예: October
d : 일 (1자리 표기) 예: 1~31
dd : 일 (2자리 표기) 예:01~31
EEE : 요일 (약어) 예: 수
EEEE : 요일 예: 수요일
aa : 오전/오후
H : 시 (24시간 단위, 1자리 표기) 예: 0~23
HH : 시 (2자리 표기) 예:00~23
K : 시 (12시간 단위, 1자리 표기) 예: 0~11
KK : 시 (2시간 단위, 2자리 표기) 예:00~11
m : 분 (1자리 표기) 예: 0~59
mm : 분 (2자리 표기) 예:00~59
s : 초 (1자리 표기) 예: 0~59
ss : 초 (2자리 표기) 예:00~59
S : 밀리 초
■로케일로 날짜 포맷하기
로케일이란 국가와 지역, 사용 언어에 관한 종류를 나타낸것입니다.
NSDateFormatter *변수 = [《NSDateFormatter*》 setLocale:《NSLocale*》];
○로케일 설정하기
NSLocale* 변수 = [[NSLocale alloc] initWithLocaleIdentifier:《NSString*》];
→initWithLocaleIdentifier:@"kr",@"ja",@"en_US"
[《NSDateFormatter*》 setDateStyle:스타일 종류 ];
[《NSDateFormatter*》 setTimeStyle:스타일 종류 ];
※스타일 종류
비표시 :NSDateFormatterNoStyle
짧은형식:NSDateFormatterShortStyle
표준형식:NSDateFormatterMediumStyle
긴형식 :NSDateFormatterLongStyle
--------------------------------예제--------------------------------
NSDate* date = [NSDate date];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"kr"];
[fmt setDateStyle:NSDateFormatterLongStyle];
[fmt setTimeStyle:NSDateFormatterMediumStyle];
[fmt setLocale:locale];
NSLog(@"%@",[fmt stringFromDate:date]);
→October 4, 2020 at 02:20:05
■날짜 계산하기
○날짜 계산하기
◯◯ 년 ◯ 월 ◯ 일부터 △△ 일 후라는 날짜를 더하거나 뺄때 사용되는 메소드
NSDate* 변수 = [《NSDate*》 dateByAddingTimeInterval:《NSTimeInterval》 ];
→NSTimeInterval은 double 값으로 " 초 "를 나타내는 값입니다. 예를 들어 1 일이라면, 60 초 × 60 분 × 24 시간 = 86400 입니다.
--------------------------------예제--------------------------------
NSDate* date = [NSDate date]; // 2020/10/4
NSTimeInterval t = 60 * 60 * 24 * 1000; // 1000일
NSDate* date2 = [date dateByAddingTimeInterval:t];
NSLog(@"%@",date2);
→2023-07-1 23:44:31
○두 날짜사이의 차이 구하기
NSTimeInterval 변수 = [《NSDate*》 timeIntervalSinceDate:《NSDate*》];
--------------------------------예제--------------------------------
NSDate* date = [NSDate date]; // 2020/10/4
NSString* dateString = @"2020/10/1";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/M/d"];
NSDate *date2 = [formatter dateFromString:dateString];
NSTimeInterval t = [date timeIntervalSinceDate:date2];
NSInteger days = (int)(t / (60 * 60 * 24));
NSLog(@"%ld",days);
→4
■NSCalendar 날짜 다루기
○달력으로부터 날짜다루기
NSCalendar *변수 = [NSCalendar currentCalondar];
NSDateComponents *변수 = [《NSCalendar*》 components:《NSCalendarUnit》 fromDate:《NSDate*》];
※달력 유닛
NSCalendarUnitEra - 시대 (기원전 · 서기 등)
유닛 지정 방법
NSCalendarUnitYear - 년
NSCalendarUnitMonth - 월
NSCalendarUnitDay - 일
NSCalendarUnitHour - 시간
NSCalendarUnitMinute - 분
NSCalendarUnitSecond - 초
NSCalendarUnitWeekday - 요일
NSCalendarUnitWeekdayOrdinal - 요일 (달의 몇 번째요일인지)
예: WeekdayOrdinalUnit =2, WeekdayUnit = 3일 경우, 달의 두번째 화요일
NSCalendarUnitWeekOfMonth - 주 (1 년의 몇 주째인지)
NSCalendarUnitWeekOfYear - 주 (달의 몇 주째인지)
NSCalendarUnitQuarter - 몇 사분기인지
NSCalendarUnit unit = NSYearCalendarUnit|NSMonthCalendarUnit;
NSInteger 변수 = [《NSDateComponents*》 era];
NSInteger 변수 = [《NSDateComponents*》 year];
NSInteger 변수 = [《NSDateComponents*》 month];
NSInteger 변수 = [《NSDateComponents*》 day];
NSInteger 변수 = [《NSDateComponents*》 hour];
NSInteger 변수 = [《NSDateComponents*》 minute];
NSInteger 변수 = [《NSDateComponents*》 second];
NSInteger 변수 = [《NSDateComponents*》 week];
NSInteger 변수 = [《NSDateComponents*》 weekday];
NSInteger 변수 = [《NSDateComponents*》 weekdayOrdinal];
NSInteger 변수 = [《NSDateComponents*》 quarter];
--------------------------------예제--------------------------------
NSDate* date = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents* dc = [calendar components:unit fromDate:date];
NSLog(@"%ld-%ld-%ld",[dc year],[dc month],[dc day]);
→2020-10-5
○NSDateComponents로 시간길이 정하기
NSDateComponents* 변수 = [NSDateComponents alloc];
[《NSDateComponents*》 setEra:《NSInteger》];
[《NSDateComponents*》 setYear:《NSInteger》];
[《NSDateComponents*》 setMonth:《NSInteger》];
[《NSDateComponents*》 setDay:《NSInteger》];
[《NSDateComponents*》 setHour:《NSInteger》];
[《NSDateComponents*》 setMinute:《NSInteger》];
[《NSDateComponents*》 setSecond:《NSInteger》];
[《NSDateComponents*》 setWeekOfMonth:《NSInteger》];
[《NSDateComponents*》 setWeekday:《NSInteger》];
[《NSDateComponents*》 setWeekdayOrdinal:《NSInteger》];
[《NSDateComponents*》 setQuarter:《NSInteger》];
--------------------------------예제--------------------------------
1개월 2주의 경우:
「setMonth:1」 , 「setWeekOfMonth:2」
을 설정해주면 됩니다.
○날짜 계산하기
NSDate *변수 = [《NSCalendar*》 dateByAddingComponents:
《NSDateComponents*》 toDate:《NSDate*》
options:《NSUInteger》]; // 옵션은 보통 0을 지정합니다.
--------------------------------예제--------------------------------
NSDate* date = [NSDate date]; // 2020-10-04 16:06:47
NSDateComponents* dc = [[NSDateComponents alloc] init];
NSCalendar* calendar = [NSCalendar currentCalendar];
[dc setMonth:1];
[dc setWeekOfMonth:2];
NSDate* date2 = [calendar dateByAddingComponents:dc toDate:date options:0];
NSLog(@"%@",date2);
→2020-11-18 16:04:52
○두 날짜사이의 차이 구하기
NSDateComponents *변수 = [《NSCalendar*》 components:《NSCalendarUnit》
fromDate:《NSDate*》 toDate:《NSDate*》 options:《NSUInteger》];
--------------------------------예제--------------------------------
NSDate* date = [NSDate date]; // 2020-10-04 16:17:33
NSString* dateString = @"2019-01-01 00:00:00";
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date2 = [formatter dateFromString:dateString];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitWeekOfMonth | NSCalendarUnitDay;
NSDateComponents* dc = [calendar components:unit fromDate:date2 toDate:date options:0];
NSLog(@"%ld주 %ld일",[dc weekOfMonth],[dc day]);
→91주 5일
'iOS > Objective-c' 카테고리의 다른 글
[Objective-C]NSMutableArray다루기 (0) | 2020.10.09 |
---|---|
[Objective-C]NSArray다루기 (0) | 2020.10.07 |
[Objective-C]NSMutableString다루기 (0) | 2020.10.02 |
[Objective-C]NSString다루기 (0) | 2020.10.01 |
[Objective-C]인스턴스 변수의 접근 권한 및 속성(propert) (0) | 2020.09.30 |