当我调用 NSTimeZone’s 缩写方法时,它会返回GMT-07:00
。然后,当我使用此值查找时区名称或(time zone identifier)时,它返回nil
。
我需要检索官方time zone identifier,例如America/Los_Angeles
。因此,如何将时区偏移缩写(例如GMT-07:00
)转换为官方时区标识符?
这是我的代码:
NSTimeZone* localTimeZone = [NSTimeZone localTimeZone];
NSString* localAbbreviation = [localTimeZone abbreviation];
NSDictionary* abbreviationDictionary = [NSTimeZone abbreviationDictionary];
NSString* timeZoneID =
[abbreviationDictionary objectForKey:localAbbreviation]; //should return 'America/Los_Angeles' if the abbreviation is ‘PDT’
答案 0 :(得分:6)
(我重写了我的回复,之前我误解了这个问题。)
以下是如何从缩写词中转换timeZone的示例:
NSTimeZone* localTimeZone = [NSTimeZone localTimeZone];
NSString* localAbbreviation = [localTimeZone abbreviation];
要从localAbbreviation转换回来,只需要重新创建timeZone:
NSTimeZone* timeZoneFromAbbreviation = [NStimeZone timeZoneWithAbbreviation:abbreviation];
NSString* timeZoneIdentifier = timeZoneAbbreviation.name;
NSLog(@"Identifier: %@", timeZoneIdentifier); // Outputs America/Santiago for me.
您确定缩写是“GMT-07:00”吗?我的返回“CLT”,而非GMT抵消。
答案 1 :(得分:2)
希望这可能会有所帮助 编辑+应该在那里完全显示正常缩写
-(NSString*)getTimeZoneStringForAbbriviation:(NSString*)abbr{
NSTimeZone *atimezone=[NSTimeZone timeZoneWithAbbreviation:abbr];
int minutes = (atimezone.secondsFromGMT / 60) % 60;
int hours = atimezone.secondsFromGMT / 3600;
NSString *aStrOffset=[NSString stringWithFormat:@"%02d:%02d",hours, minutes];
return [NSString stringWithFormat:@"GMT+%@",aStrOffset];
}