1

我的目标:如果当前日期是“今天”或“昨天”,请使用“今天”和“昨天”这两个词。如果当前日期早于今天或昨天,则使用以下格式(周四,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]];
4

1 回答 1

0

这是一个 hack,因为我找不到执行此任务的内置方法,但它几乎完美无缺。唯一的问题是它输出月份的全名而不是简短的输出。如果需要,这当然可以以类似于我在以下代码中对年份所做的方式进行修复。

    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

于 2013-08-16T06:48:17.387 回答