2010-12-17 2 views
10

아래 코드를 참조하십시오.NSDateFormatter + dateFormatFromTemplate : options : locale : BUG?

NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease]; 
[dateComponents setYear:2011]; 
[dateComponents setMonth:1]; 
[dateComponents setDay:1]; 

NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents]; 

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"YYYYMMMd" options:0 locale:[NSLocale currentLocale]]]; 

NSString *dateString = [dateFormatter stringFromDate:date]; 

NSLog(@"Happy New Year: %@", dateString); 

예상되는 결과는 무엇입니까?

Happy New Year: Jan 1, 2011 

그러나 결과는 ...

Happy New Year: Jan 1, 2010 

문제점은 무엇입니까? 도와주세요 ...

답변

16

템플릿 형식 문자열은 @"yyyyMMMd"이어야합니다 (연도는 소문자 "y").

대문자 "Y"는 다른 것입니다 (Unicode Date Format Patterns 참조).

+4

+1 특히, Y는 현재주의 연도입니다. 2011 년 1 월 1 일 주는 2010 년에 속하므로 YYYY는 2010 년을 생산합니다. – ughoavgfhw

+0

대단히 감사합니다 ~ – alforo

+0

@ughoavgfhw : 감사합니다. 나는 "Y"가 대부분의 시간 동안 "일"하는 것처럼 보이기 때문에 혼란 스러울 수 있기 때문에 대답의 차이점을 지적해야했습니다. 대문자 "Y"는 귀하의 날짜를 포함하는 주간이 시작되는 연도를 알려줍니다. 따라서 Jan 1이 목요일에있는 경우 "Y"는 해당주의 * 시작 *의 연도를 부여합니다 (예 : 월요일). 1 월 7 일 이후에 "Y"는 "y"와 같은 결과를 줄 것입니다. 물론 올바른 서식 지정 문자를 사용하는 것이 더 좋습니다. – Anna