Как установить часовой пояс для даты в iOS 3.x - PullRequest
1 голос
/ 16 декабря 2011

Кто-нибудь знает, как установить часовой пояс в объекте NSDate до iOS 4.0? В iOS 4 и выше я делаю следующее:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekdayCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit) fromDate:aDate];
NSTimeZone *gmt = [NSTimeZone timeZoneForSecondsFromGMT:0];
[components setTimeZone:gmt];
NSDate *newDate = [calendar dateFromComponents:components];

Проблема в том, что setTimeZone и NSTimeZoneCalendarUnit доступны только начиная с iOS 4.0. Должен ли я сделать вычитание на компоненте часов?

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

NSCalendar имеет метод setTimeZone:

Доступно в iOS 2.0 и более поздних версиях.

Устанавливает часовой пояс для получателя.

- (void)setTimeZone:(NSTimeZone *)tz

Пример:

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"America/Jamaica"]];
NSLog(@"calendar timezone: %@", calendar.timeZone);

Вывод NSLog:

календарный часовой пояс: смещение Америки / Ямайки (EST) -18000

или со смещением часового пояса:

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSLog(@"calendar timezone: %@", calendar.timeZone);

NSLog выход:

calendar timezone: GMT (GMT) offset 0
1 голос
/ 16 декабря 2011

Вы должны использовать setTimeZone: для объекта NSCalendar.

...