如何将两个NSDate格式化为时差字符串(例如2天前)并使其遵循设备的区域格式?

时间:2011-12-23 09:53:10

标签: ios nsdate nsdateformatter nsdatecomponents

标准框架是否支持时差格式并创建遵循区域设置的格式?我知道我可以将它分解为NSDateComponents但是我必须自己附加文本并创建不同的语言支持文件。我想知道可能有一种方法来格式化日期,并使其遵循区域设置简单和类似于此...

dateFormat = [[[NSDateFormatter alloc] init] autorelease]; [dateFormat setDateStyle:NSDateFormatterMediumStyle]

感谢

1 个答案:

答案 0 :(得分:6)

您可以通过执行以下操作来启用相对日期格式:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.doesRelativeDateFormatting = YES;

这将为您提供看起来像“昨天”,“今天”,“明天”等的日期字符串。

如果这还不够,那么这可能很有用:http://zetetic.net/code/nsdate-helper

NSDate类别并不适用于我想要的东西,所以我添加了我自己的功能,基于类别中的一个..似乎工作,但没有保证;)当然这只会给你一些信息 - 它没有给你区域设置格式等。

- (NSUInteger)daysAgoAgainstMidnight2 {
    // get a midnight version of ourself:
    NSDateFormatter *mdf = [[NSDateFormatter alloc] init];
    [mdf setDateFormat:@"yyyy-MM-dd"];
    NSDate *midnightMe = [mdf dateFromString:[mdf stringFromDate:self]];
    NSDate *midnightNow = [mdf dateFromString:[mdf stringFromDate:[NSDate date]]];

    NSDateComponents *components = [calendar components:(NSDayCalendarUnit)
                                               fromDate:midnightMe                                                             toDate:midnightNow
                                                options:0];
    return [components day];
}