Ios tzID GMT-8有时区名称吗 我们的一个用户住在美国,他去了印度 他的设备时区设置为美国/洛杉矶

Ios tzID GMT-8有时区名称吗 我们的一个用户住在美国,他去了印度 他的设备时区设置为美国/洛杉矶,ios,Ios,对于下面的代码,self.tzID设置为PST NSTimeZone *timeZone = [NSTimeZone localTimeZone]; self.tzID = [timeZone abbreviation]; 然后,我可以正确地获得TZName作为America/Los_Angeles,代码为: NSDictionary *tzDict = [NSTimeZone abbreviationDictionary]; NSString *tzName = [tzDict objec

对于下面的代码,
self.tzID
设置为
PST

NSTimeZone *timeZone = [NSTimeZone localTimeZone];
self.tzID = [timeZone abbreviation];
  • 然后,我可以正确地获得TZName作为
    America/Los_Angeles
    ,代码为:

    NSDictionary *tzDict = [NSTimeZone abbreviationDictionary];
    NSString *tzName = [tzDict objectForKey:self.tzID];
    
  • 问题是当他在印度时,
    tzID
    被设置为GMT-8,而
    tzDict
    没有任何键GMT-8,这使得
    tzName
    nil

    • tzIDGMT-8是否有时区名称
    • 如果是的话,我怎样才能得到它的名字

      • 获取时区名称的方法是询问其本地化名称。例如:

        NSString *name = [timeZone localizedName:NSTimeZoneNameStyleGeneric locale:nil];
        
        这将返回时区的正确本地化名称。根据需要,您可以使用不同的样式,包括“标准”和“短标准”、“日光节约”等


        如果您需要区分标准和DST,请使用IsDaylightSavingTimeOrDate:确定要使用哪一个。

        您应该小心使用缩写在字典中查找名称。问题是缩略语模棱两可(同一个缩略语在不同的地方有不同的含义)。更糟糕的是,你不能只查找什么是GMT-8,因为目前有七个,所以你无法知道用户想要哪个

        所以,你真的不应该为了查找的目的而使用缩写。使用
        timeZone.name
        (或者在Swift 3中使用
        timeZone.identifier
        )而不是
        缩写