1

任何人都知道如何在 iOS 4.0 之前的 NSDate 对象中设置时区?在 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 开始可用。我需要对小时数部分进行减法吗?

4

2 回答 2

3

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
于 2011-12-15T21:47:48.467 回答
1

您应该setTimeZone:NSCalendar对象上使用。

于 2011-12-15T21:49:12.747 回答