dateFromString始终使用dateformatter返回null

ahe*_*ang 14 iphone objective-c

我有以下代码:

 NSDateFormatter * df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setFormatterBehavior:NSDateFormatterBehaviorDefault];

    [df dateFromString:@"2011-04-12 10:00:00"];
Run Code Online (Sandbox Code Playgroud)

它始终生成一个空日期.为什么是这样?

Ale*_*lex 29

如果设备设置为AM/PM时间并且请求的字符串格式设置为@"yyyy-MM-dd HH:mm:ss" dateFromString将返回nil.

如果将区域设置设置为@"en_US"转换将返回正确的日期.

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [dateFormat dateFromString:@"2013-02-14 09:30:00"];
Run Code Online (Sandbox Code Playgroud)


Jan*_*ann 18

你是在后台线程吗?我没有在ui-thread中使用NSDateFormatter时遇到过奇怪的经历.无论如何,这是我使用的方法,应该适合你:

+ (NSDate*)parseDate:(NSString*)inStrDate format:(NSString*)inFormat {
    NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init];
    [dtFormatter setLocale:[NSLocale systemLocale]];
    [dtFormatter setDateFormat:inFormat];
    NSDate* dateOutput = [dtFormatter dateFromString:inStrDate];
    [dtFormatter release];
    return dateOutput;
}
Run Code Online (Sandbox Code Playgroud)


小智 8

我遇到过同样的问题.我开始通过使用此资源仔细检查用于转换的字符串是否有效.

然后我想到它可能是语言环境,所以我尝试了以下内容:

[dateFomatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_AU"]]

它就像一个魅力.希望这可以帮助.