在西班牙语语言环境中将NSString转换为NSDate

时间:2015-06-29 15:00:08

标签: ios localization nsdate

我已将RSS提要解析器集成到iOS应用程序中。收到的数据中的一个字段是发布日期。如果iPhone语言环境是英语 - 美国,我可以解析该日期。但是当我将iPhone的语言改为西班牙语时,它无法将字符串转换为NSDate对象。

这是我写的代码:

NSString* dt = @"Fri, 26 Jun 2015 00:00:00";
NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init];
//set the locale to spanish
[dtFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"es"]];
[dtFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss"];
NSDate* conDt = [dtFormatter dateFromString:dt ];
NSLog(@"%@", conDt); //This value is always (null)

即使将语言环境设置为“es”(西班牙语),它仍然无法正确解析它。如何在iOS中将字符串转换为日期?

1 个答案:

答案 0 :(得分:4)

设置语言环境时,您不希望使用设备的语言环境,而是使用创建字符串时使用的语言环境(因为您正在使用英语字符串并希望将其转换为{{1无论设备的语言环境如何)。事实上,建议使用NSDate

en_US_POSIX

Technical Q&A #1480。这主要关注使用RFC 3999 / ISO 8601日期字符串的公历问题,但它也适用于语言设置。

顺便说一句,我注意到你没有设置时区。通常,当日期不包含任何时区信息时,它们已被转换为GMT / UTC / Zulu。因此,您可能还想为格式化程序设置时区:

[dtFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

鉴于你的字符串的时间成分是“00:00:00”,也许这并不重要,但是如果处理日期时间字符串,你经常要确保正确捕获字符串中使用的时区,同样。