2012-05-30 3 views
0

"4:15:00 PM"을 NSDate로 변환하려면 어떻게해야합니까? 아래 코드 나는이된다NSDateFormatter가 4:15:00 PM과 작동하지 않습니다.

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"HH:mm:ss aa"]; 
NSDate *date = [df dateFromString:@"4:15:00 PM"]; 

NSLog(@"date: %@",date);//outputs: 1970-01-01 17:15:00 +0000 
//should output: 1970-01-01 16:15:00 +0000 

업데이트를 : 나는 응답에 따라 업데이트하고 난 여전히 잘못된 쇼를 데 :

NSLog(@"date: %@",[df stringFromDate:date]);//outputs: 12:15:00 PM 
//should output: 4:15:00 PM 

4시 15분에서 시간 변경을하지 왜 질문은 : 00 PM 12:15:00 PM.

+0

NSDate의 NSLog는 UTC로 표시됩니다. –

+0

그리고 [12/24 gotcha] (http://stackoverflow.com/q/6613110/581994)에 유의하십시오. –

답변

5

실제로 이것은 맞습니다.

그러나 디버거 및 NSLog으로 그리니치 표준시로 표시됩니다.

현지 시간을 표시하려면 NSDateFormatterstringFromDate을 사용하십시오.

업데이트 :
날짜 형식 지정자 형식도 잘못 설정되어 있습니다.

12시 시계를 사용 중이므로 [df setDateFormat:@"hh:mm:ss aa"];이어야합니다.

+0

여전히 문제가 있습니다. 업데이트를 참조하십시오. 감사! – joe

+0

음, 지금 정확한 시간을 출력하고 있습니다. 다르게 표시하려면 형식을 변경하십시오. – lnafziger

+0

오후 12:15:00에 출력됩니다. 정확한 시간은 4:15:00 PM입니다. – joe

2

로캘 때문에 발생합니다.

NSDateFormatter은 항상 GMT 시간 인 NSDate를 출력합니다.

GMT 시간으로 해석되는 초기 문자열을 원할 경우 시간대를 포함시켜야합니다.

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"HH:mm:ss aa z"]; 
NSDate *date = [df dateFromString:@"4:15:00 PM GMT"]; 
+0

GMT를 입력 문자열에 추가하지 않고도이 작업을 수행 할 수 있습니까? – joe

+0

그리니치 표준시를 사용하지 않는다면 로케일의 시간대를 사용하게 될 것입니다. – trapper

+0

기본값으로 설정되어있는 경우 "4:15:00 PM"에서 "12:15:00 PM"으로 시간이 변경되는 이유는 무엇입니까? – joe

관련 문제