2010-12-01 1 views
5

나는 2010-10-11 0시 0분 0초왜 NSCalendar의 dateFromComponents가 잘못된 날짜를 반환합니까?

을 기대하고있다하지만 그 대신 내가 아는 2010-10-10 21시 0분 0초 0000

내가 몇 시간을 추가 할 수 있습니다, 받아 원하는 날짜를받습니다. 그러나 전날 21 시간으로 전날을 얻는 이유를 모르겠습니다 ...

도와주세요!

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:2010]; 
[comps setMonth:10]; 
[comps setDay:11]; 

[comps setHour:0]; 
[comps setMinute:0]; 
[comps setSecond:0]; 

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *retDate = [cal dateFromComponents:comps]; 

답변

15

NSTimeZone을 설정하면 문제가 해결 될 수 있습니다.

+3

이 그래, 당신 말이 맞아이 필요 해요! \t [cal setTimeZone : [NSTimeZone timeZoneWithAbbreviation : @ "GMT"]]; 문제를 해결했습니다 –

+0

흠 ... coool ... :) – KingofBliss

0

특정 시간 형식이 필요한 경우 해당 형식 지정자를 사용하거나 올바른 시간을 얻기 위해이 형식을 사용하십시오. 첫 번째 옵션 ...

let formatter = NSDateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
    let localDate = formatter.dateFromString("1989-10-17T05:00:00.000-0000") 

하거나 아래 코드 등을 사용하는 구성 요소에서 날짜를 필요로하는 경우 ...

let calendar = NSCalendar.currentCalendar() 
    calendar.timeZone = NSTimeZone(name: "GMT")! 
    let date = calendar.dateFromComponents(components) 

또는