从时区ID获取NSTimezone缩写

3
在我的IOS应用程序中,我有一个时区ID,例如"America/Los_Angeles",我想获取它的缩写"PST"。
我编写了以下代码:
NSTimeZone* theTimezone = [NSTimeZone timeZoneWithName:_timezone];
    _timezoneAbbreviation = theTimezone.abbreviation;

我的问题是_timezoneAbbreviation总是返回形如"UTC-x"或"UTC+x"的字符串,而不是正确的缩写。

如果我查看[NSTimeZone abbreviations]返回的NSDictionary,它包含正确的缩写(例如“America / Los_Angeles”的PST)。

有什么想法吗?

Sebastien。


小心时区缩写。在夏季,您需要使用PDT而不是PST来表示相同的“America/Los_Angeles”时区。对于像CST这样的缩写词,存在许多歧义。 - Matt Johnson-Pint
它应该由NSTimeZone管理 -> 从Apple文档中提取“请注意,缩写在不同时期可能会不同。例如,在夏令时期间,美国/东部时区的缩写为“EDT”。在其他时间,它的缩写是“EST”。” - sebastien
当然可以,但你需要以某个日期为基础来确定。你可以在某个特定时间(比如现在或上个月)询问时区缩写,但我不知道它如何猜测正确。 - Matt Johnson-Pint
2个回答

8
abbreviation 方法的结果似乎与区域设置相关。如果我将区域格式设置为“美国”,那么您的代码实际上会返回“PST”。如果将区域格式设置为“德国/德语”,则返回“GMT-8”(在 iOS 模拟器上测试过)。
但是,
[theTimezone localizedName:NSTimeZoneNameStyleShortStandard
                    locale:[NSLocale localeWithLocaleIdentifier:@"en_US"]]

无论区域格式如何,都会给出“PST”。

(我知道这只是部分解决方案。它仅针对美国时区返回所需的结果。但也许它指向了正确的方向来解决问题。)


好的答案!我会进一步调查那个方向。 - sebastien
1
一个自定义的解决方案是使用其默认缩写字典,并从中找出特定的缩写。 [NSTimezone abbreviationDictionary]; - Mrug

0

直接使用字典。或者创建自己的字典,这样您就可以完全控制它。


我可以这么做,但从苹果文档中得知,方法 -(NSString *)abbreviation 应该返回“PST”… - sebastien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接