【问题标题】:Date Formatting with RelativeDateFormatting使用 RelativeDateFormatting 进行日期格式化
【发布时间】:2013-08-16 03:46:47
【问题描述】:

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

【问题讨论】:

标签: ios objective-c nsdate


【解决方案1】:

这是一个 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

【讨论】:

  • 一点警告:这个解决方案不能很好地处理本地化设备。
  • 这是正确的,如果您更改语言环境,它将中断。您可以更改不带逗号的theYear 字符串,这样您就可以在任何语言环境中删除年份。不幸的是,viernes, 16 de agosto de 不是用西班牙语输出日期的正确方法。
  • relativeDateFormatting 上的文档在这个主题上非常清楚:developer.apple.com/library/mac/documentation/Cocoa/Reference/…:
  • 我不确定你在@RobvanderVeer 得到了什么如果relativeDateFormat 设置为YES,那么它适用于所有语言环境。如果,它不是格式将显示为我上面复制的西班牙语16 de agosto de
  • 对不起,我可能对这个问题理解得不够清楚。
猜你喜欢
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2013-04-06
相关资源
最近更新 更多