이 코드NSCalendar의 dateFromComponents : 대신 systemTimeZone
NSCalendar *calendar =[NSCalendar currentCalendar];
[gregorian setTimeZone:tz];
NSLog(@"%@", [gregorian timeZone]);
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[NSDate date]];
[comp setDay:info.day];
[comp setMonth:info.month];
[comp setYear:info.year];
[comp setHour:info.hour];
[comp setMinute:info.minute];
[comp setSecond:info.second];
[comp setTimeZone:tz];
NSLog(@"%@", [comp timeZone]);
NSLog(@"%@", [gregorian dateFromComponents:comp]);
의 GMT 시간대 콘솔에서 다음을 보여줍니다
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
그래서, 일정 및 구성 요소의 시간대가 제대로 지정되어 있지만,있는 NSDate 값을 [gregorian dateFromComponents:comp]
반환 잘못된 시간대 (GMT).
올바른 시간대를 얻으려면 무엇을 교정해야합니까?
( NSDateFormatter 및 데이터 포맷 설명서를 참조하십시오). 어쨌든,'NSDate' 객체에는 시간대에 대한 개념이 전혀 없습니다. 기준 날짜로부터 측정 된 ** 절대 ** 순간을 나타냅니다. 'NSDateFormatter'를 사용하여 다른 시간대에 대한 날짜의 다른 사람이 읽을 수있는 * 표현 *을 얻을 수 있지만, 표현은 그것들입니다. – albertamg
NSDate는 시간 소인의 중요하지 않은 비트에서 파생 된 시간대를 숨 깁니다. 이것은 [NSDate description]에 대해서만 사용하기위한 것이며, 최선으로 신뢰할 수 없습니다. –
그래, 네 말이 맞아. 감사합니다. 이제 알겠습니다. – Mitry