NSDate는 순수하게 시각값을 가진 오브젝트
실제로 그냥 출력을 하면 UTC(협정시)의 형태를 보여준다.
NSLog( @"%@", [ NSDate date ] ); -> 2012-06-11 08:02:34 +0000
시각값을 가지고 작업을 할 때에는 Time Zone 문제가 항상 존재하는데, NSDate 하나로는 해결하기 힘들다.
이때 시각값에 특정 포멧을 넣어 작업을 하기 위해서는 NSDateFormatter라는 것이 필요하다.
밑의 그림은 연습 프로그램의 일부이다.
NSDateFormatter의 메소드인 setTimeZone, setDateFormat
setTimeZone은 특정 Time Zone을 설정할 수 있다.
setDateFormat은 표현하고자 하는 시각 포멧을 설정할 수 있다.
setDateFormat에서 설정할 수 있는 포멧은 잘 검색해 보길 바라고...
setTimeZone을 통해 정할 수 있는 NSTimeZone에 대해서 조금 더 설명해 보겠다.
NSTimeZone의 메소드 중 timeZoneWithName:( NSString * )을 사용했다. ( 위 소스에서 strCurRegion 부분 )
여기에서 NSString에 들어가는 텍스트가 중요한데, 내가 확인한 바로는 416개가 존재했다.
몽땅 여기에 써 넣을 수도 있겠지만, 직접 확인해보길...
해당 텍스트는 NSLog( @"%@", [ NSTimeZone knownTimeZoneNames ] )를 통해 알 수 있다.
결과값은 NSArray 이므로 쓰기 쉬울 것이다.
우리나라에서 표준시로 쓰고 있는 GMT+0900은 "Asia/Seoul"로 표현되어 있다.
"Asia/Tokyo"로 써도 똑같다는 것은 비☆밀 -ㅅ-;
또한 NSDateFormatter로 각각의 시각 성분을 뽑아낼 수도 있다.
이런식으로 각각의 성분을 뽑아서 따로 사용할 수도 있다.
특정 시각을 설정하고 싶을 때에는 NSDateComponents를 사용한다.
또 여기에서 NSCalendar가 나오는데 이건 나도 자세히는 모르겠다...
아무튼 이런식으로 특정 시각 값을 가진 NSDate 오브젝트를 얻을 수 있다.
마지막으로 NSDateFormatter에서 dateFromString이라는 메소드가 있는데, 2012-06-11 08:02:34 +0000 이러한 텍스트를 넣어주면
그에 따른 시각값을 가진 NSDate 오브젝트를 얻을 수 있다.
시각 값 조작하는 코드가 너무 많은 것 같아서 조금 헛갈리는데, 나는 이 정도로만 사용할 것이다.
NSDate의 메소드 중에는 timeIntervalSince... 시리즈가 있는데, 타이머에 사용할 시간이나, 두 시각 값 사이의 차이 시간이라든지 여러가지로 활용할 부분이 많을 것이다.