使用RelativeDateFormatting进行日期格式设置

时间:2013-08-16 03:46:47

标签: ios objective-c nsdate

我的目标:如果当前日期为“今天”或“昨天”,请使用“今天”和“昨天”字样。如果当前日期在今天或昨天之前,则使用以下格式(星期四,8月15日)。当我将setDoesRelativeDateFormatting设置为NO时,我可以使用@"EEE, MMM d"来实现此格式,但是当我尝试使用以下代码时,它会分解并显示2013年8月12日,这不是我想要的...

// 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]];

1 个答案:

答案 0 :(得分: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