2013-08-16 50 views
1

我的目标:如果当前日期是“Today”或“Yesterday”,请使用“Today”和“Yesterday”两个字。如果当前日期在今天或昨天之前,则使用以下格式(星期四,8月15日)。我能够但是实现使用@"EEE, MMM d"当我设置setDoesRelativeDateFormatting为NO这种格式,当我尝试使用下面的代码它分解并显示月,12 2013年,这是不是我想要的......使用RelativeDateFormatting进行日期格式化

// Set up the date formatter 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
     [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
     [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
     dateFormatter.dateFormat = @"EEE, MMM d"; 


     [dateFormatter setDoesRelativeDateFormatting:YES]; 
     [dateFormatter setLocale:[NSLocale currentLocale]]; 
+0

入住这里:http://stackoverflow.com/questions/4937230/relative-string-from-nsdate –

回答

0

这是一个黑客,因为我找不到一个内置的方法来执行此任务,但它几乎完美地工作。唯一的问题是它输出月份的全名而不是短的输出。当然,如果需要的话,可以用类似于我在下面的代码中所做的那样修复。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateStyle:NSDateFormatterFullStyle]; 

    NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:[NSDate date]]; 

    NSString *theYear = [NSString stringWithFormat:@", %ld", comps.year]; 

    [dateFormatter setDoesRelativeDateFormatting:YES]; 

    [dateFormatter setLocale:[NSLocale currentLocale]]; 

    NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
    if ([dateString isEqualToString:@"Today"] || [dateString isEqualToString:@"Yesterday"]) { 
     NSLog(@"%@", dateString); 
    } else { 
     dateString = [dateString stringByReplacingOccurrencesOfString:theYear withString:@""]; 
     NSLog(@"%@", dateString); 
    } 

当相对格式化就可以了打印Today,当其从它打印Friday, August 16

+0

小警告:此解决方案不能很好地处理本地化设备。 –

+0

这是正确的,如果你改变它会破坏的语言环境。你可以改变'theYear'字符串而不用逗号,这将允许你删除任何语言环境中的年份。不幸的是,16 de agosto de并不是用西班牙语输出日期的正确方法。 –

+0

关于'relativeDateFormatting'的文档对这个主题非常清楚:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/ occ/instm/NSDateFormatter/setDoesRelativeDateFormatting: –