【问题标题】:NSDateFormatter dateFromString: returns nil [duplicate]NSDateFormatter dateFromString:返回 nil [重复]
【发布时间】:2011-07-20 11:58:16
【问题描述】:

我在使用NSDateFormatterdateFromString 方法时遇到问题。

我有以下日期:Tue, 12 Jul 2011 20:18:26 GMT,但NSDateFormatter 似乎无法识别并返回(null)

这是我尝试过的:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd/MM/yyyy HH:MM:SS"];
    NSDate *date = [dateFormatter dateFromString:@"Tue, 12 Jul 2011 20:18:26 GMT"];
    [dateFormatter release];

    NSLog(@"Date: %@",date);

我做错了什么?

【问题讨论】:

    标签: ios objective-c cocoa-touch nsdate nsdateformatter


    【解决方案1】:

    在这种情况下,您需要设置dateFormat 以匹配字符串中日期的格式。请尝试以下操作:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"ddd, dd MMM YYYY HH:MM:SS ZZZ"];
    NSDate *date = [dateFormatter dateFromString:@"Tue, 12 Jul 2011 20:18:26 GMT"];
    [dateFormatter setDateFormat:@"dd/MM/yyyy HH:MM:SS"];
    NSString *newFormattedDate = [dateFormatter stringFromDate:date];
    
    NSLog(@"Date: %@ || %@",datem newFormattedDate);
    

    【讨论】:

    • 你确定ddddocumentation 似乎暗示它应该是 Eeeeccc
    • 不确定,只是在长度上做了类比。格式是伪代码。)
    【解决方案2】:

    您的问题是您的日期格式@"dd/MM/yyyy HH:MM:SS" 与您的日期字符串@"Tue, 12 Jul 2011 20:18:26 GMT" 不匹配。您需要使用不同的日期格式。

    【讨论】:

    • 好的 - 但它应该是什么?
    • @David:看看 Eimantas 的回答。这是你需要的一个很好的主意。
    • 是的,我找到了。在他发布之前发布了之前的评论。
    【解决方案3】:

    您正在解析的字符串与您在NSDateFormatter 上设置的格式字符串不匹配。您输入的格式是:

    dd/MM/yyyy HH:MM:SS
    

    ...匹配如下字符串:

    "15/07/2011 10:30:01"
    

    如果您希望它匹配Tue, 12 Jul 2011 20:18:26 GMT,那么您需要更改格式。你可能会有更好的运气:

    [dateFormatter setDateFormat:@"E, dd MMM yyyy HH:MM:SS z"];
    

    您可能会发现此needlessly complex documentation 很有帮助。

    【讨论】:

    • 好的 - 但它应该是什么?
    • @David - 试试E, dd MMM yyyy HH:MM:SS z
    • 试过了 - 但这仍然返回null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2020-01-31
    相关资源
    最近更新 更多