//NSDateFormatter 를 생성한다.
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
//데이트 형식을 지정한다.
[inputFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];
//inputFormatter 에 지정한 형식대로 NSDate 가 생성된다.
NSDate *formatterDate = [inputFormatter dateFromString:@"1999-07-11 at 10:30"];
//위에 까지가 날짜 생성
//NSDateFormatter 를 생성한다.
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
// 날짜 포맷을 세팅한다.
[outputFormatter setDateFormat:@"HH:mm 'on' EEEE MMMM d"];
//포맷된 형식되로 날짜를 NSString 으로 보여준다. formatterDate 은 위에서 세팅한 날짜 NSDate 값
NSString *newDateString = [outputFormatter stringFromDate:formatterDate];
//로그에 출력해서 본다.
NSLog(@"newDateString %@", newDateString);
부록
enum { // date and time format styles
NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
NSDateFormatterShortStyle = kCFDateFormatterShortStyle,
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,
NSDateFormatterLongStyle = kCFDateFormatterLongStyle,
NSDateFormatterFullStyle = kCFDateFormatterFullStyle
};
NSDate *date = [NSDate date];
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
NSDateFormatterNoStyle : ()
NSDateFormatterShortStyle : 10/24/08 (M/d/yy)
NSDateFormatterMediumStyle : Oct 24, 2008 (MMM d, yyyy)
NSDateFormatterLongStyle : October 24, 2008 (MMMM d, yyyy)
NSDateFormatterFullStyle : Friday, October 24, 2008 (EEEE, MMMM d, yyyy)
yyyy : 년도
w : 일년안에서 몇번째 주인지
W : 한달안에서 몇번째 주인지
MM : 월
dd : 일
D : 일년에서 몇번째 일인지
E : 요일 (ex) Tuesday; Tue
F : 요일을 숫자로 (ex) 2
hh : 시간 ( 12시간 단위로 1-12)
kk : 시간 (12시간 단위로 0-11)
HH : 시간 (24시간 단위로 1-24)
KK : 시간 (24시간 단위로 0-23)
a : PM 인지 AM 인지
mm : 분
ss : 초. second in minute
SSS : Millisecond
zzzz : General time zone (ex) Pacific Standard Time; PST
; GMT-08:00
Z : RFC 822 time zone (ex) -800
Date and Time Pattern | Result |
---|
"yyyy.MM.dd G 'at' HH:mm:ss z" | 2001.07.04 AD at 12:08:56 PDT |
"EEE, MMM d, ''yy" | Wed, Jul 4, '01 |
"h:mm a" | 12:08 PM |
"hh 'o''clock' a, zzzz" | 12 o'clock PM, Pacific Daylight Time |
"K:mm a, z" | 0:08 PM, PDT |
"yyyyy.MMMMM.dd GGG hh:mm aaa" | 02001.July.04 AD 12:08 PM |
"EEE, d MMM yyyy HH:mm:ss Z" | Wed, 4 Jul 2001 12:08:56 -0700 |
"yyMMddHHmmssZ" | 010704120856-0700 |
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" | 2001-07-04T12:08:56.235-0700 |
NSDateFormatter가 제공하는 기본 스타일을 사용하지 않고 사용자가 직접 스타일을 지정하여 날짜의 문자열을 얻을 수 있습니다. 아래의 코드를 보시죠 :)
//커스텀 날짜 형식
{
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"MM/dd/yyyy hh:mma"];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"Custom Style Date : %@", dateString);
}
//출력결과
//Custom Style Date : 10/06/2010 03:39PM
위에서 MM, dd, yyyy 와 같은 형식지정자가 어떤 역할을 하는지 알아야 하는데 어디서 그 내용을 알 수 있을까요? 바로 ICU (International Components for Unicode)에서 표준 날짜 형식 지정자를 정해 놓습니다. 여기서 제공하는 문서에서 날짜 형식 패턴 부분을 보면 자세한 설명과 간단한 예제가 있습니다. 아래에 예제를 첨부합니다.
Pattern | Result (in a particular locale) |
---|
yyyy.MM.dd G 'at' HH:mm:ss zzz | 1996.07.10 AD at 15:08:56 PDT |
EEE, MMM d, ''yy | Wed, July 10, '96 |
h:mm a | 12:08 PM |
hh 'o''clock' a, zzzz | 12 o'clock PM, Pacific Daylight Time |
K:mm a, z | 0:00 PM, PST |
yyyyy.MMMM.dd GGG hh:mm aaa | 01996.July.10 AD 12:08 PM |
코드를 통해 몇가지 예제를 더 살펴 보겠습니다.
//커스텀 날짜 형식
{
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"%@", dateString);
}
//출력결과
//Wednesday October 6, 2010
//커스텀 날짜 형식
{
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"H:mm a, zzz"];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"%@", dateString);
}
//출력결과
//15:39 PM, GMT+09:00
문자열로 표현된 날짜 데이터를 NSDate 객체로 바꾸는 것도 빈번히 일어나는 일입니다. 간한히 예로 들면 100610 이라고 표현된 날짜 문자열을 2010/10/06으로 바꾸고 싶을 때 다음 순서를 따라야 합니다.
- 우선 100610 을 NSDateFormatter를 이용하여 NSDate 객체로 변환한다
- 변환된 NSDate 를 NSDateFormatter를 이용하여 원하는 날짜 문자열을 얻는다.
위의 순서대로 작성한 코드를 보겠습니다 :)
//문자열 날짜를 NSDate로 변경하기
{
NSString *dateStr = @"20020505";
// 1. NSDate로 변경하기
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *date = [dateFormat dateFromString:dateStr];
// 2. 원하는 문자열 얻기
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
dateStr = [dateFormat stringFromDate:date];
NSLog(@"%@", dateStr);
}
//출력결과
//Sunday May 5, 2002
문자열로 표현된 날짜 데이터를 NSDate 객체로 변경하여 날짜간의 차이를 얻는 것은 NSDate 의 인스턴스 메소드인 timeIntervalSinceDate 를 이용하면 됩니다
지역에 맞게 날짜 데이터를 출력해 보겠습니다. 우선 현재 사용하고 있는 아이폰이 어떤 지역 설정을 사용하는지 알아보겠습니다. 아래 코드를 보시죠 :)
//아이폰이 현재 사용하고 있는 지역 설정 표시
{
NSLocale *locale = [NSLocale currentLocale];
NSLog(@"Current Locale : %@", [locale localeIdentifier]);
}
//출력결과 (시뮬레이터)
//Current Locale : en_US
위 결과를 보시면 현재 지역이 미국으로 설정되어 있습니다. 이를 한국으로 바꾸면 월 이름과 요일 이름이 한글로 출력됩니다. 아래 코드를 보시죠 :)
//지역 설정을 한국으로 변경하기
{
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"ko_KR"] autorelease]];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"Today : %@", dateString);
}
//출력결과
//Today : 수요일 10월 6, 2010
NSLocale을 "ko_KR"로 생성하여 NSFormatter에 설정해 주면 됩니다. 그럼 일본어로 표시해 볼까요?
//지역 설정을 일본으로 변경하기
{
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease]];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"Today : %@", dateString);
}
//출력결과
//Today : 水曜日 10月 6, 2010
지금까지 NSDate와 NSDateFormatter에 대해서 알아보았습니다. 해피코딩하세요!
//date1를 현재 날짜로 설정 NSDate *date1 = [NSDate date];
//date2을 지정된 날짜로 설정
NSString *dateStr = @"2015-01-05 23:11:08";
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date2 = [dateFormat dateFromString:dateStr];
NSLog(@"Date1 : %@", [dateFormat stringFromDate:date1]);
NSLog(@"Date2 : %@", [dateFormat stringFromDate:date2]);
//date1과 date2의 차이를 dateComp변수에 저장
NSDateComponents *dateComp;
dateComp = [[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:date1 toDate:date2 options:0];
NSLog(@"Year : %d", [dateComp year ]);
dateComp = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit fromDate:date1 toDate:date2 options:0];
NSLog(@"Month : %d", [dateComp month ]);
dateComp = [[NSCalendar currentCalendar] components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0];
NSLog(@"Day : %d", [dateComp day ]);
dateComp = [[NSCalendar currentCalendar] components:NSHourCalendarUnit fromDate:date1 toDate:date2 options:0];
NSLog(@"Hour : %d", [dateComp hour ]);
dateComp = [[NSCalendar currentCalendar] components:NSMinuteCalendarUnit fromDate:date1 toDate:date2 options:0];
NSLog(@"minute : %d", [dateComp minute]);
dateComp = [[NSCalendar currentCalendar] components:NSSecondCalendarUnit fromDate:date1 toDate:date2 options:0];