Этот код
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]);
показывает в консоли следующее:
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
Итак, часовой пояс для календаря и компонентов указан правильно, но [gregorian dateFromComponents:comp]
возвращает значение NSDate с неправильным часовым поясом (GMT).
Что мне нужно исправить, чтобы получить правильный часовой пояс?
NSDate
object напрямую, вы всегда получите его представление по Гринвичу. Во всяком случае,NSDate
объекты вообще не имеют понятия о часовых поясах. Они представляют собой абсолютный момент времени, отсчитываемый от контрольной даты. Вы можете получить различные удобочитаемые представления даты для разных часовых поясов, используяNSDateFormatter
, но они это, представления. - person albertamg   schedule 07.09.2011