【问题标题】:NSDateFormatter stringFromDate, dateFromString both returning nilNSDateFormatter stringFromDate, dateFromString 都返回 nil
【发布时间】:2013-01-09 10:28:57
【问题描述】:

您好,我正在尝试格式化我的 NSString。但它不起作用。我尝试了我在 stackoverflow 中得到的所有答案,但对我没有任何作用。

NSLog(@"log 1: %@ %@", [dealDetailsDict objectForKey:@"DealDateViewed"], [[dealDetailsDict objectForKey:@"DealDateViewed"] class]);
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLog(@"log 2: %@ %@", [df stringFromDate:[dealDetailsDict objectForKey:@"DealDateViewed"]], [df dateFromString:[dealDetailsDict objectForKey:@"DealDateViewed"]]);

我不知道这里有什么问题,stringFromDatedateFromString 都返回 nil。这是我的NSLog

log 1: 2013-01-09 10:02:45 +0000 __NSCFString
log 2: (null) (null)

我想显示像31-12-2010 这样的日期。所以我设置,

[df setDateFormat:@"dd-MM-yyyy"];

我的问题从这里开始。

【问题讨论】:

    标签: iphone ios nsstring nsdate nsdateformatter


    【解决方案1】:

    将以下功能用于日期格式...

    -(NSString*) Dateformate:(NSString*)str
    {    
        NSDateFormatter *dfrt =[[NSDateFormatter alloc] init];
        [dfrt setDateFormat:@"yyyy-MM-dd h:mm:ss"];
        NSDate *presentdate = [dfrt dateFromString:str];
        [dfrt setDateFormat:@"MMMM"];
        NSString *fullMonth = [dfrt stringFromDate:presentdate];
    
        [dfrt setDateFormat:@"yyyy"];
        NSString *yearStr = [dfrt stringFromDate:presentdate];
       // NSLog(@"month %@",presentdate);
    
        [dfrt setFormatterBehavior:NSDateFormatterBehavior10_4];
        [dfrt setDateFormat:@"d"];
        int date_day = [[dfrt stringFromDate:presentdate] intValue];
        NSString *suffix_string = @"|st|nd|rd|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|st|nd|rd|th|th|th|th|th|th|th|st";
        NSArray *suffixes = [suffix_string componentsSeparatedByString: @"|"];
        NSString *suffix = [suffixes objectAtIndex:date_day];
    
        NSString *fullDateFormat = [NSString stringWithFormat:@"%@ %d%@ %@",fullMonth,date_day,suffix,yearStr];
    
       // NSLog(@"fullDateFormat %@",fullDateFormat);
    
        return fullDateFormat;
    
    }
    

    【讨论】:

    • @suvi : 不错的尝试,但是当你有很多 API 服务时,不需要做所有那些冗长的事情。更快、更灵活、经过测试。
    【解决方案2】:

    您已设置日期格式yyyy-MM-dd HH:mm:ss 它是为2013-01-09 10:02:45 但您的日期字符串是2013-01-09 10:02:45 +0000

    要么从日期字符串中删除区域+0000,要么在日期格式字符串中包含区域。

    【讨论】:

    • 仍然是零阿米特。我删除了+0000 并尝试了。仍然没有返回值。
    • +1,为帮助我整理。因为在您的帮助下,我找到了@suvi 的答案
    【解决方案3】:

    使用这个:

    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss z"]; 
    

    然后再次将您需要的格式设置为:

    [df setDateFormat:@"yyyy-MM-dd"];
    

    【讨论】:

    • 仍然获得null
    • 试试[df setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
    • 一个有效,但它不格式化。它按原样打印值。我要显示yyyy-MM-dd
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多