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

How to get GMT value for each timezone from knownTimeZoneNames

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

但此方法 returns 仅时区名称(如 "Africa/Abidjan")。

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

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

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

唯一悬而未决的问题是将秒数转换为小时数或 hours/minutes,这应该不会太困难。也许默认 [NSTimeZone description] 会 return 正确的信息?

你也可以使用方法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"。你不需要从小时和分钟来构建它。