【发布时间】:2016-05-25 10:19:46
【问题描述】:
我知道如何获取已知时区列表:[NSTimeZone knownTimeZoneNames]。
但此方法仅返回时区名称(如“Africa/Abidjan”)。
如何从该数组中获取每个已知时区的 GMT 值(如 GMT+3 或 GMT-7)?
【问题讨论】:
标签: ios objective-c nstimezone
我知道如何获取已知时区列表:[NSTimeZone knownTimeZoneNames]。
但此方法仅返回时区名称(如“Africa/Abidjan”)。
如何从该数组中获取每个已知时区的 GMT 值(如 GMT+3 或 GMT-7)?
【问题讨论】:
标签: ios objective-c nstimezone
一般情况下,为每个时区名称创建一个NSTimeZone 实例,然后从每个实例中获取secondsFromGMT 属性:
for (NSString *name in [NSTimeZone knownTimeZoneNames]) {
NSTimeZone *tz = [NSTimeZone timeZoneWithName:name];
NSInteger gmtOffset = tz.secondsFromGMT;
}
唯一未解决的问题是将秒数转换为小时或小时/分钟,这应该不会太难。也许默认的[NSTimeZone description] 会返回正确的信息?
【讨论】:
你也可以使用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"。您不需要从小时和分钟构建它。
【讨论】: