如何从knownTimeZoneNames获取每个时区的GMT值

时间:2016-05-25 10:19:47

标签: ios objective-c nstimezone

我知道如何获取已知时区列表:[NSTimeZone knownTimeZoneNames]

但是此方法仅返回时区名称(例如“Africa / Abidjan”)。

如何从该数组中获取每个已知时区的GMT值(如GMT+3GMT-7)?

2 个答案:

答案 0 :(得分:1)

通常,为每个时区名称创建一个NSTimeZone实例,然后从每个实例中获取secondsFromGMT属性:

for (NSString *name in [NSTimeZone knownTimeZoneNames]) {
    NSTimeZone *tz = [NSTimeZone timeZoneWithName:name];
    NSInteger gmtOffset = tz.secondsFromGMT;
}

唯一突出的问题是从几秒钟转换为几小时或几小时/分钟,这不应该太困难。也许默认的[NSTimeZone description]会返回正确的信息吗?

答案 1 :(得分:0)

您还可以使用方法timeZoneForSecondsFromGMT

NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:secondsFromGMT];
NSMutableString *name = [NSMutableString stringWithString:timeZone.name];
if (! [name isEqualToString:@"GMT"])
{
    [name insertString:@":" atIndex:6];
}
return [NSString stringWithString:name];

输出为@"GMT+03:00"。你不需要从几小时到几分钟来构建它。