2011-12-17 4 views
2

날짜가 다음과 같습니다. 월 = 12 월, 일 = 01, 연도 = 2011. 날짜는 "111201"(YYMMdd) 형식의 NSString 형식으로 제공됩니다. 지금은 NSDateFormatter와있는 NSDate 객체로이 문자열을 구문 분석 할 :NSDateFormatter가 의미가 없습니다

self.dateFormatter = [[NSDateFormatter alloc] init]; 
[self.dateFormatter setDateFormat:@"YYMMdd"]; 
NSDate* date = [self.dateFormatter dateFromString:strDate]; 

그리고 "111201"의 출력 "2011-11-30 23시 0분 0초 0000"입니다. 그건 나에게 의미가 없다.

어떻게 가능합니까? 나는 "2011-12-01 23:00:00 +0000"을 기대합니다. 날짜의 포맷이 추가

+2

시간 정보가 없으므로 특정 기본 시간을 가정 한 다음 시간대 오프셋을 적용합니다. 현지 시간은 어떤 시간대로 설정되어 있습니까? –

+0

시간대 차이로 인해 한 달 차이가 발생하지 않습니다. – samfisher

+0

@samfisher - 두 날짜의 차이는 하루에 한 번뿐입니다. 이는 아마도 타임 라인 문제 일 것입니다. – jrturton

답변

3

그들은 항상 GMT 날짜 및 시간으로 표시됩니다 (결국 +0000이 의미하는 바입니다).

현지 시간대가 '+0100'(서유럽?)으로 표시되므로 날짜 포맷터가 '12 년 1 월 1 일 00:00 am +0100 '에서 작동하고 NSDate가 올바르게 생성됩니다. 그러나 표시 시점에서 NSDate (표준 시간대 정보가없는 단일 지점)는 GMT로 표시되며 이에 상응하는 시간은 '11 월 30 2011 23:00 pm +0000'입니다.

당신이 정말로 '111201' '2011년 12월 1일 오전 12시 0000'로 변환 할 경우

다음과 같이 GMT로 날짜 포맷의 시간대를 설정 : 당신이 날짜에 읽고있는 것 같습니다

self.dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
+0

그건 의미가 있습니다. 따라서 실제 문제는 전혀 없습니다. NSDate 설명의 출력 만 "잘못된"날짜를 표시합니까? – toom

+0

정확하게 - '잘못된 날짜'가 아닌 것을 제외하고 - 'December 01 2011 00:00 am +0100'은 'November 30 2011 23:00 pm +0000'과 완전히 동일합니다. –

+0

요약 - NSDates는 시간대에 중립적입니다. 시간대를 고려하기 위해 변환 시점 (문자열 - 날짜 또는 날짜 - 문자열)을주의 깊게 살펴 봐야합니다. –

0

봅니다 GMT 오프 시간대를 해결하려면 다음

당신이 NSLog를 통해 디버거 또는 출력 그 값을에있는 NSDate 개체를 표시
self.dateFormatter.timeZone = [NSTimeZone systemTimeZone]; 
+0

힌트를 보내 주셔서 감사합니다. setTimeZone : [NSTimeZone localTimeZone], setTimeZone : [NSTimeZone systemTimeZone]은 아무런 차이가 없습니다. – toom

+0

Bummer. 전환하는 동안 명시 적으로 시간을 00:00:00으로 설정하면 어떻게 될까요? – Bek

관련 문제