Nsdateformatter +时区问题
我想parsing这个date时间戳开始string:
Wed, 11 Sep 2013 08:51:41 EEST
这个问题只有
EEST
,我试过Z或ZZ或V,什么也没有发生。 date格式化程序总是获得NULL。
当我从string切割EEST的时候,一切顺利。
任何人都可以build议,如何解决这个问题?
谢谢
更新:
dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_EN_POSIX"]]; [dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EEST"]]; [dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss V"]; dateFromString = [dateFormat dateFromString:beginString];
您解决这个问题的方法是将语言环境更改为en_GB
,date格式化程序将能够正确parsingdatestring。
以下是来自苹果开发者的bug报告团队回复雷达的解释#9944011 :
这是iOS 5中的一个有意的改变。问题是:使用由z(= zzz)或v(= vvv)指定的短格式,可能会有很多不明确的地方。 例如,东部时间的“ET”可能适用于许多不同地区的不同时区,为了提高格式化和parsing可靠性,如果“cu”(常用)标志被设置为在这种情况下,只使用长格式(用于格式化和parsing),这是开源的CLDR 2.0 / ICU 4.8的变化,这是iOS 5中ICU的基础,的NSDateFormatter行为。
对于“en”语言环境(=“en_US”),cu标志被设置为诸如阿拉斯加,America_Central,America_Eastern,America_Mountain,America_Pacific,Atlantic,Hawaii_Aleutian和GMT的元区域。 这不是为欧洲中心设定的。
但是,对于“en_GB”语言环境,cu标志设置为Europe_Central。
所以,为短时区样式“z”或“zzz”和区域设置“en”或“en_US”设置的格式化程序将不会parsing“CEST”或“CET”,但是如果区域设置改为“en_GB”那些。 “GMT”风格将被所有人parsing。
如果格式化程序设置为长时区样式“zzzz”,区域设置为“en”,“en_US”或“en_GB”中的任何一个,则以下任一项都将被parsing,因为它们是明确的:
“太平洋夏令时”“中欧夏令时”“中欧时间”
试试这个:
NSString *beginString = @"Wed, 11 Sep 2013 08:51:41 EEST"; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-GB"]]; [dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; NSDate *dateFromString = [dateFormat dateFromString:beginString];
在这里看到细节和解释