1

我在使用NSDateFormatter解析日期字符串时遇到问题。我已经将下面的方法方法实现为NSDate类别。输入是以下日期字符串Thu, 22 Dec 2011 16:03:39 +0100并使用以下模式解析EEE,dd MMM yyyy HH:mm:ss ZZZ

问题是该方法返回nil

+(NSDate*) dateFromString:(NSString*)dateString pattern:(NSString*)pattern
{
    NSDateFormatter *dateParser = [[NSDateFormatter alloc] init];
    [dateParser setDateFormat:pattern];

    NSDate *parsedDate = [dateParser dateFromString:dateString];

return parsedDate;
}

我查看了 Stackoverflow 和 Internet 上的其他地方,但没有找到解决此问题的方法。

4

1 回答 1

2

NSDateFormatter在区域设置方面非常聪明,例如 12/24 小时显示、月份和工作日名称等。如果您初始化日期格式化程序,它始终使用当前区域设置,但您可以手动设置区域设置。您可以使用en_US_POSIX区域设置标识符来获取不尊重区域设置并始终使用相同行为的日期格式化程序。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

例如,如果您需要解析从服务器返回的日期字符串,这很方便(实际上是必需的)。

如果你想在你的应用程序中显示日期字符串,你不应该-setDateFormat:直接使用该方法,顺便说一句。使用+dateFormatFromTemplate:options:locale:方法获取正确的日期格式。

在某些语言中,月份写在一天之前,...

    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"dd MMMM yyyy" options:0 locale:[NSLocale currentLocale]];
    [dateFormatter setDateFormat:dateFormat];
于 2012-08-22T12:32:52.547 回答