2013-11-21 40 views
2

在我的IOS应用程序中,我有一个像“America/Los_Angeles”的timezoneid,我想要得到它的缩写“PST”。NSTimezone从timezoneId获取缩写

我写了下面的代码:

NSTimeZone* theTimezone = [NSTimeZone timeZoneWithName:_timezone]; 
    _timezoneAbbreviation = theTimezone.abbreviation; 

我的问题是_timezoneAbbreviation收益总是喜欢“UTC-X”或“UTC + X”代替相应的缩写的字符串。

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

有什么想法?

塞巴斯蒂安。

+0

小心时间区域缩写。在今年夏天,你会希望在同一个“America/Los_Angeles”区域使用PDT而不是PST。对于像“CST”这样的缩写,有[许多含糊之处](http://en.wikipedia.org/wiki/Time_zone_abbreviations)。 –

+0

它应该由NSTimeZone管理 - >从Apple Doc提取“请注意,缩写可能在不同的日期有所不同。例如,在夏令时期间,美国/东部时区的缩写为”EDT“。在其他时间,其缩写是“EST”。“ – sebastien

+0

当然,但不知怎的,你需要指出日期作为做出决定的基础。您可以在某个特定时间要求提供时区缩写(例如现在或上个月等),但我不明白它是如何正确猜测的。 –

回答

7

abbreviation方法的结果似乎取决于语言环境。如果我将区域格式设置为“美国”,那么您的代码实际返回“PST”。如果我将区域格式设置为“德国/德国”,它将返回“GMT-8”(在iOS模拟器上测试)。

[theTimezone localizedName:NSTimeZoneNameStyleShortStandard 
        locale:[NSLocale localeWithLocaleIdentifier:@"en_US"]] 

给 “PST”,独立于区域格式。

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

+0

好的答案!我会在这方面进行更多的调查。 – sebastien

+1

一个自定义解决方案是使用其默认缩写字典并从中找出特定的缩写。 [NSTimezone abbreviationDictionary]; – Mrug

0

直接使用字典。或者创建自己的字典,以便完全控制它。

+0

我可以做到这一点,但从Apple文档的方法 - (NSString *)的缩写应该返回“PST”... – sebastien

相关问题