如何将时区偏移缩写转换为官方时区标识符?

时间:2011-08-30 19:15:57

标签: iphone objective-c ios cocoa-touch

当我调用 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’

2 个答案:

答案 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];
    }