iOS: 格式化新浪微博/QQ说说等等的发布时间

介绍:对于一些社交工具,我们可以发布一些说说或者心情什么的,如新浪微博,QQ,微信等,发布成功后,上面都会有一个发布的时间。

这个时间并不是具体的NSDate类型,而是经过格式化过的符合一般标准的模式,例如:发布于前一个月、前一个星期、前一天、十几分钟前、刚刚等。

下面就给出两个具体的测试Demo

头文件:

//  ViewController.m
//  测试发布时间格式化
//
//  Created by mac on 16/1/26.
//  Copyright © 2016年 mac. All rights reserved.
//

#import "ViewController.h"

#define knewsTimeFormat @"yyyyMMddHHmmss" //你要传过来日期的格式

#define kcreatedDateFormat @"EEE MMM dd HH:mm:ss Z yyyy" //你要传过来日期的格式

#define kLocaleIdentifier @"en_US"  //时区类型

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
     注意:传入的需要格式化的时间字符串必须与你设置的日期的格式对应
//测试一
    NSString *str = @"20160126132609";  //  2016/01/26 13:26:09
    NSLog(@"%@",[self newsTime:str]);

    //测试二
    NSString *str2 = @"Tue Jan 26 13:50:08 +0800 2016";
    NSLog(@"%@",[self formatCreatedDate:str2]);
}

测试一:

//方式一: 获取发布时间
- (NSString *)newsTime:(NSString *)newsTimes
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = knewsTimeFormat;
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:kLocaleIdentifier];

    NSDate *date = [formatter dateFromString:newsTimes];

    NSDate *now = [NSDate date];

    // 比较帖子发布时间和当前时间
    NSTimeInterval interval = [now timeIntervalSinceDate:date];

    NSString *format;
    if (interval <= 60) {
        format = @"刚刚";
    } else if(interval <= 60*60){
        format = [NSString stringWithFormat:@"发布于前%.f分钟", interval/60];
    } else if(interval <= 60*60*24){
        format = [NSString stringWithFormat:@"发布于前%.f小时", interval/3600];
    } else if (interval <= 60*60*24*7){
        format = [NSString stringWithFormat:@"发布于前%d天", (int)interval/(60*60*24)];
    } else if (interval > 60*60*24*7 & interval <= 60*60*24*30 ){
        format = [NSString stringWithFormat:@"发布于前%d周", (int)interval/(60*60*24*7)];
    }else if(interval > 60*60*24*30 ){
        format = [NSString stringWithFormat:@"发布于前%d月", (int)interval/(60*60*24*30)];
    }

    formatter.dateFormat = format;
    return [formatter stringFromDate:date];
}

输出结果:

2016-01-26 14:32:28.324 测试发布时间格式化[1809:109947] 发布于前1小时

测试二:

//方式二: 获取发布时间
-(NSString *)formatCreatedDate:(NSString *)newsTimes
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

    formatter.dateFormat = kcreatedDateFormat;

    formatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:kLocaleIdentifier];

    NSDate *date = [formatter dateFromString:newsTimes];

    NSDate *now = [NSDate date];

    // 比较帖子发布时间和当前时间
    NSTimeInterval timeInterval =  [now timeIntervalSinceDate:date];

    if(timeInterval < 60) //1分钟
    {
        return @"最近";
    }
    else if(timeInterval < 60*60)  //1小时
    {
        return [NSString stringWithFormat:@"%d分钟前",(int)timeInterval/60];
    }
    else if(timeInterval < 60*60*24) //1天
    {
        return [NSString stringWithFormat:@"%d小时前",(int)timeInterval/60/60];
    }

    return [NSString stringWithFormat:@"%.1lf",timeInterval];
}
@end

输出结果:

2016-01-26 14:32:28.325 测试发布时间格式化[1809:109947] 42分钟前
时间: 2024-10-29 10:46:22

iOS: 格式化新浪微博/QQ说说等等的发布时间的相关文章

[转] IOS 格式化输出符号与类型转换

1.IOS 格式化输出符号 %@    对象 %d,%i 整数 %u   无符号整形 %f    浮点(双字节) %x,%X  二进制整数 %o  八进制整数 %zi    正整数 %zu   size_t %p  指针 %e  浮点/双字节(科学计算) %g  f浮点/双字节 %s   C 字符串 %.*s  pascal字符串 %c   字符 %C unichar %lld  64位长整数 %llu  无符号64位长整数 %Lf   64位双字节 2.数据类型转换 2.1.NSString转

iOS TableView实现QQ好友列表(三)

上节我们讲到如何展示好友信息 iOS TableView实现QQ好友列表(二) http://blog.csdn.net/lwjok2007/article/details/46549111 接下来我们将分组点击的时候折叠起来. 首先新建一个可变字典用来存储当前列表是否展示 NSMutableArray *selectedArr;//控制列表是否被打开 selectedArr=[[NSMutableArray alloc]init]; 根据前两节所讲,我们讲分组名称放在section的heade

iOS 13.4 简易版越狱已发布,仅需几分钟就可以越狱成功

iOS 13.4 简易版越狱已发布?指的是checkra1n越狱东西,因之前的checkra1n越狱版别不支撑iOS 13.4体系越狱,老是卡主进度条,无法完结引导越狱过程,如下图所示. 随后卢卡斯越狱大神发布了checkra1n 0.9.9 内测版别,该版别参加iOS 13.4体系支撑,注意,仍是内测阶段,并未正式上线在官网. 接着,checkra1n 0.9.9 内测版存在BUG,又迅速发布了checkra1n 0.10.0 内测版,修复了0.9.9版别的问题,越狱大神也建议iOS 13.4

Android开发记录19-朋友圈动态发布时间计算

Android开发记录19-朋友圈动态发布时间计算 转载请注明:IT_xiao小巫,http://blog.csdn.net/wwj_748 如果觉得博文不错,请移步到2014年博客之星投票地址:http://vote.blog.csdn.net/blogstar2014/details?username=wwj_748#content 前面的一篇文章给大家关于时间知识点的分享http://blog.csdn.net/wwj_748/article/details/11536421,本篇博客笔者

模仿微信朋友圈发布时间,将过去时间格式化成xx(秒/分/小时/天)前

模仿微信朋友圈发布时间,使用扩展方法将将过去时间展示成xx(秒/分/小时/天)前,以留言列表中的留言时间为例,先来看一下直接的时间展示效果(date.ToString("yyyy/MM/dd HH:mm:ss")) 感觉很一般,没有什么特别 下面 我们写一个拓展方法,将留言时间格式化成xx(秒/分/小时/天)前 decimal.Truncate(data)//取decimal整数位 public static class HtmlExpansion { //只格式化2天内的时间 pub

iOS constraint被应用与view上的时间

在viewdidload时,constraint是没有被应用的,之后在layoutSubviews时,系统应用了constraint.但是我感觉在viewWillLayoutSubviews函数时就已经应用了constraint到view上,但是没有进行绘制.如果你想在constraint执行后调整view的frame,不能写在viewWillLayoutSubviews上,应该重写layoutSubviews,注意不要忘记调用super的方法.当然,在viewDidLayoutSubviews

Sql批量修改帝国cms文章发布时间(需unix时间,否则会变为1970-01-01)

在迁移网站时,有时我们需要将帝国cms文章发表时间批量修改为当前时间,在帝国cms后台→系统设置→备份与恢复数据→执行sql语句: update phome_ecms_news set newstime = '2014-07-03'; (ps:phome这个是默认的数据库表前缀,如果创建数据库时有设置成其他的可以自行修改) 这样执行sql语句后刷新所有文章,你会发现时间变为了1970-01-01,这是因为newstime这个类型是int(10),必须是unix时间戳,所以我们必须先把当前时间转换

标题右边10px位置紧跟发布时间

一个ul列表,拥有若干li,内容是新闻标题,标题右边10px位置紧跟发布时间,当标题过长需要控制标题width,需要兼容ie6,不能用max-width h4{font-size:14px;height:27px;line-height:27px;padding-left:10px;border-bottom:#ddd 1px solid;} .news{width:310px;border:#ddd 1px solid;word-break:break-all; height:auto; ov

dedecms实现编辑文章时不自动修改发布时间

dedecms默认编辑文章时自动修改文章的发布时间,如何让它不自动修改发布时间呢? 找到后台编辑文章的模板文件稍作调整即可. 文件/dede/templets/artical_edit.htm 把 $nowtime = GetDateTimeMk(time()); 改成 $nowtime = GetDateTimeMk($arcRow["pubdate"]);