//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) TuesdayTue

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 TimePSTGMT-08:00

Z : RFC 822 time zone (ex) -800

 

Date and Time PatternResult
"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)에서 표준 날짜 형식 지정자를 정해 놓습니다. 여기서 제공하는 문서에서 날짜 형식 패턴 부분을 보면 자세한 설명과 간단한 예제가 있습니다. 아래에 예제를 첨부합니다.

PatternResult (in a particular locale)
yyyy.MM.dd G 'at' HH:mm:ss zzz1996.07.10 AD at 15:08:56 PDT
EEE, MMM d, ''yyWed, July 10, '96
h:mm a12:08 PM
hh 'o''clock' a, zzzz12 o'clock PM, Pacific Daylight Time
K:mm a, z0:00 PM, PST
yyyyy.MMMM.dd GGG hh:mm aaa01996.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으로 바꾸고 싶을 때 다음 순서를 따라야 합니다.

  1. 우선 100610 을 NSDateFormatter를 이용하여 NSDate 객체로 변환한다
  2. 변환된 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];


      
Posted by k_ben