iOS之 改变日期显示样式
来源:互联网 发布:ubuntu 16.04 syslog 编辑:程序博客网 时间:2024/06/05 10:52
开发社交或者资讯类APP时需要把获取的时间日期改为可读性好的“几小时前”、“几分钟前”
下面我提供方法,可以备下以后套用
首先在工程中添加NSDate的类目”NSDate+GDGCategory“
NSDate+GDGCategory.h
#import <Foundation/Foundation.h>@interface NSDate (GDGCategory)/** *比较from和self的时间差值 */-(NSDateComponents*)deltaFrom:(NSDate*)from;/** *是否为今年 */-(BOOL)isThisYear;/** *是否为今天 */-(BOOL)isToday;/** *是否为昨天 */-(BOOL)isYesterday;@end
NSDate+GDGCategory.m
#import "NSDate+GDGCategory.h"@implementation NSDate (GDGCategory)-(NSDateComponents*)deltaFrom:(NSDate*)from{ //初始化日历 NSCalendar * calendar = [NSCalendar currentCalendar]; //设置日历单元 NSCalendarUnit unit = NSCalendarUnitDay |NSCalendarUnitMonth |NSCalendarUnitYear |NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond; //返回比较你的数据时间与现在时间的差值 return [calendar components:unit fromDate:from toDate:self options:0];}/* *例如 2016 - 05 - 01 * 年份值 月份 日 * *///判断是否是今年-(BOOL)isThisYear{ NSCalendar * calendar = [NSCalendar currentCalendar]; //现在日期的年份值 NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]]; //传入对象的年份值 NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self]; return nowYear == selfYear;}//判断是否是今天-(BOOL)isToday{ NSDateFormatter * fmt = [[NSDateFormatter alloc]init]; fmt.dateFormat = @"yyyy-MM-dd"; //今天的日期 NSString * nowString = [fmt stringFromDate:[NSDate date]]; //传入对象的日期 NSString * selfString = [fmt stringFromDate:self]; return [nowString isEqualToString:selfString];}//判断是否是昨天-(BOOL)isYesterday{ NSDateFormatter * fmt = [[NSDateFormatter alloc]init]; fmt.dateFormat = @"yyyy-MM-dd"; //今天的日期 NSDate *nowDate = [fmt dateFromString:[fmt stringFromDate:[NSDate date]]]; //传入对象的日期 NSDate *selfDate = [fmt dateFromString:[fmt stringFromDate:self]]; //二者差值 NSCalendar * calender = [NSCalendar currentCalendar]; NSDateComponents * cmps = [calender components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:selfDate toDate:nowDate options:0]; return cmps.year == 0 && cmps.month == 0 && cmps.day == 1;}@end
备注很清楚,应该可以看懂,代码可以用在很多地方
ViewController.h
#import <UIKit/UIKit.h>@interface ViewController : UIViewController/**你所获取数据的发布时间 */@property (nonatomic, copy) NSString *create_time;//get方法-(NSString *)create_time;@end
ViewController.m
#import "ViewController.h"#import "NSDate+GDGCategory.h"@interface ViewController ()@end@implementation ViewController//重写get方法-(NSString *)create_time{ //日期格式化 NSDateFormatter * fmt = [[NSDateFormatter alloc]init]; //设置日期格式 fmt.dateFormat = @"yyyy-MM-dd HH-mm-ss"; //帖子的创建时间 NSDate * create = [fmt dateFromString:_create_time]; /** 显示效果 今年 今天 1分钟内 刚刚 1小时内 xx分钟前 其他 xx小时前 昨天 昨天 18:56:34 其他 06-23 19:56:23 非今年 2016-05-08 18:45:30 */ if (create.isThisYear) { // 今年 if (create.isToday) { // 今天 //时间差 NSDateComponents *cmps = [[NSDate date] deltaFrom:create]; if (cmps.hour >= 1) { // 时间差距 >= 1小时 return [NSString stringWithFormat:@"%zd小时前", cmps.hour]; } else if (cmps.minute >= 1) { // 1小时 > 时间差距 >= 1分钟 return [NSString stringWithFormat:@"%zd分钟前", cmps.minute]; } else { // 1分钟 > 时间差距 return @"刚刚"; } } else if (create.isYesterday) { // 昨天 fmt.dateFormat = @"昨天 HH:mm:ss"; return [fmt stringFromDate:create]; } else { // 其他 fmt.dateFormat = @"MM-dd HH:mm:ss"; return [fmt stringFromDate:create]; } } else { // 非今年 return _create_time; }}
Demo下载 :GitHub DateShowStyle
0 0
- iOS之 改变日期显示样式
- [iOS开发]TextKit之动态改变样式
- 改变鼠标显示样式
- IOS改变状态栏样式
- 改变ios input样式
- iOS UISegmentedControl改变样式
- js之改变样式
- 改变复选框显示样式
- iOS之改变BarButtonItem中显示的字体大小
- ios 日期显示
- 改变abap编辑器的界面显示样式
- 改变HTML中超链接的显示样式
- 改变HTML中超链接的显示样式
- JQury datatables 改变处理中 显示样式
- GridView使用技巧之:根据绑定的内容改变单元格(或者行)的显示样式
- javascript之DOM编程改变CSS样式(简易验证码显示)
- iOS 改变状态栏的颜色(样式)
- [iOS]UITableView滑动删除按钮样式改变
- Codeforces Round #306 (Div. 2) B DFS
- 贪心算法(2)
- view pe header on winhex
- TabLayout实现滑动导航栏
- MD风格之丰富多变Toolbar
- iOS之 改变日期显示样式
- Nginx反向代理Odoo并转为https
- 概率dp
- 初次邂逅sqlmap
- fck实现htm在线编辑
- 【杭电-oj】-1084-What Is Your Grade?(结构体)
- 【NOIP模拟】弄提纲
- shiro 整合spring
- 第一篇博客