Ios7 NSDATEComponents格式以获取;“一小时前”;或;“一天前”;

Ios7 NSDATEComponents格式以获取;“一小时前”;或;“一天前”;,ios7,unicode,ios8,localization,nsdateformatter,Ios7,Unicode,Ios8,Localization,Nsdateformatter,我可以使用NSDATEComponentsFormter获取“一小时前”或“一天前”之类的字符串吗? 我的意思是,我认为应该很容易得到“1小时前”或“1天前”,但不知道 您可以使用此功能 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; [dateFormatter setDateStyle:NSDateForm

我可以使用NSDATEComponentsFormter获取“一小时前”或“一天前”之类的字符串吗?
我的意思是,我认为应该很容易得到“1小时前”或“1天前”,但不知道

您可以使用此功能

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setLocale:locale];

[dateFormatter setDoesRelativeDateFormatting:YES];
- (NSString *)timeAgo
{
    NSDate *now = [NSDate date];
    double deltaSeconds = fabs([self timeIntervalSinceDate:now]);
    double deltaMinutes = deltaSeconds / 60.0f;

    int minutes;

    if(deltaSeconds < 5)
    {
        return NSDateTimeAgoLocalizedStrings(@"Just now");
    }
    else if(deltaSeconds < 60)
    {
        return [self stringFromFormat:@"%%d %@seconds ago" withValue:deltaSeconds];
    }
    else if(deltaSeconds < 120)
    {
        return NSDateTimeAgoLocalizedStrings(@"A minute ago");
    }
    else if (deltaMinutes < 60)
    {
        return [self stringFromFormat:@"%%d %@minutes ago" withValue:deltaMinutes];
    }
    else if (deltaMinutes < 120)
    {
        return NSDateTimeAgoLocalizedStrings(@"An hour ago");
    }
    else if (deltaMinutes < (24 * 60))
    {
        minutes = (int)floor(deltaMinutes/60);
        return [self stringFromFormat:@"%%d %@hours ago" withValue:minutes];
    }
    else if (deltaMinutes < (24 * 60 * 2))
    {
        return NSDateTimeAgoLocalizedStrings(@"Yesterday");
    }
    else if (deltaMinutes < (24 * 60 * 7))
    {
        minutes = (int)floor(deltaMinutes/(60 * 24));
        return [self stringFromFormat:@"%%d %@days ago" withValue:minutes];
    }
    else if (deltaMinutes < (24 * 60 * 14))
    {
        return NSDateTimeAgoLocalizedStrings(@"Last week");
    }
    else if (deltaMinutes < (24 * 60 * 31))
    {
        minutes = (int)floor(deltaMinutes/(60 * 24 * 7));
        return [self stringFromFormat:@"%%d %@weeks ago" withValue:minutes];
    }
    else if (deltaMinutes < (24 * 60 * 61))
    {
        return NSDateTimeAgoLocalizedStrings(@"Last month");
    }
    else if (deltaMinutes < (24 * 60 * 365.25))
    {
       minutes = (int)floor(deltaMinutes/(60 * 24 * 30));
        return [self stringFromFormat:@"%%d %@months ago" withValue:minutes];
    }
    else if (deltaMinutes < (24 * 60 * 731))
    {
        return NSDateTimeAgoLocalizedStrings(@"Last year");
    }

    minutes = (int)floor(deltaMinutes/(60 * 24 * 365));
    return [self stringFromFormat:@"%%d %@years ago" withValue:minutes];
}
-(NSString*)很久以前
{
NSDate*现在=[NSDate日期];
双deltaSeconds=fabs([self-timeIntervalSinceDate:now]);
双增量=增量秒/60.0f;
整数分钟;
if(增量秒<5)
{
返回nsDateTimeAgoLocalizedString(@“刚才”);
}
否则如果(deltaSeconds<60)
{
返回[self stringFromFormat:@“%%d%@秒前”,值为:deltaSeconds];
}
否则如果(deltaSeconds<120)
{
返回NSDateTimeAgoLocalizedString(@“一分钟前”);
}
否则如果(deltaMinutes<60)
{
返回[self stringFromFormat:@“%%d%@分钟前”,值为:deltaMinutes];
}
否则如果(deltaMinutes<120)
{
返回NSDateTimeAgoLocalizedString(@“一小时前”);
}
否则如果(deltaMinutes<(24*60))
{
会议记录=(内部)楼层(deltaMinutes/60);
返回[self stringFromFormat:@“%%d%@小时前”,值为:分钟];
}
否则如果(deltaMinutes<(24*60*2))
{
返回NSDateTimeAgoLocalizedString(@“昨天”);
}
否则如果(deltaMinutes<(24*60*7))
{
会议记录=(内部)楼层(deltaMinutes/(60*24));
返回[self stringFromFormat:@“%%d%@天以前”,值为分钟];
}
否则如果(deltaMinutes<(24*60*14))
{
返回NSDateTimeAgoLocalizedString(@“上周”);
}
否则如果(deltaMinutes<(24*60*31))
{
会议记录=(内部)楼层(deltaMinutes/(60*24*7));
返回[self stringFromFormat:@“%%d%@周前”,值为:分钟];
}
否则如果(deltaMinutes<(24*60*61))
{
返回NSDateTimeAgoLocalizedString(@“上个月”);
}
否则如果(deltaMinutes<(24*60*365.25))
{
分钟=(内部)楼层(deltaMinutes/(60*24*30));
返回[self stringFromFormat:@“%%d%@月前”,值为分钟];
}
否则如果(deltaMinutes<(24*60*731))
{
返回NSDateTimeAgoLocalizedString(@“去年”);
}
分钟=(内部)楼层(deltaMinutes/(60*24*365));
返回[self stringFromFormat:@“%%d%@年前”,值为分钟];
}

> p>这是非常可悲的,但是在基础框架的格式化程序中没有这样的功能。买你能用的。此工具包包含
TTTTimeIntervalFormatter
,允许您执行以下操作:

TTTTimeIntervalFormatter *timeIntervalFormatter = [[TTTTimeIntervalFormatter alloc] init];
[timeIntervalFormatter stringForTimeInterval:0]; // "just now"
[timeIntervalFormatter stringForTimeInterval:-100]; // "1 minute ago"

谢谢,但这不会自动将字符串本地化为其他语言,这就是我想使用的原因NSDateComponentsFormatter@Richardo很遗憾,这个格式化程序似乎没有这样的功能。我只是在字符串后面加上本地化的“ago”。