iOS时间常用方法

最近使用时间的方法交频繁,就总结了一下自己比较常见的时间相关的方法如下与大家分享。


首先是NSDate的部分方法

  1. 可以使用 首先创建现在的时间使用类方法

      NSDate *date = [NSDate date];
      或使用对象方法 NSDate *date = [[NSDate alloc]init];
    

2.时间转化为字符串-(NSString *)stringFromDate:(NSDate *)date;

   NSDate *dataNow = [NSDate date];
   NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
   formatter.dateFormat = @"HH:mm:ss";
   NSString *dateStr= [formatter stringFromDate:dataNow];```

3.字符串转化为时间-(nullable NSDate *)dateFromString:(NSString *)string;

        NSString *string = @"2014:10:10";
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
        formatter.dateFormat = @"HH:mm:ss";
        NSDate *date = [formatter dateFromString:string];
        以上时间格式化样式可以自定义如下:  
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
        formatter.dateFormat = @"yyyy/MM/dd HH/mm/ss";                                                                                                                      

4.dateByAddingTimeInterval:该方法是加上或减去一段时间得到的时间如:

  -(void)viewDidLoad {
       [super viewDidLoad]; 
     NSDate *data = [NSDate date];NSDateFormatter *formatter =   [[NSDateFormatter alloc]init];
     formatter.dateFormat = @"HH:mm:ss";
     NSString *dateStr= [formatter stringFromDate:data];
    NSLog(@"%s-%@",__FUNCTION__,dataStr);
     data = [data dateByAddingTimeInterval:-60];
     dataStr = [self datatoString:data];
     NSLog(@"%s-%@",__FUNCTION__,dataStr);
   }

第一次大一的时间是10:10:10的话那么第二次打印的就是10:09:10,即比前一次少了60秒
也可以用
NSDate *date2 = [NSDate dateWithTimeInterval:50 sinceDate:date];方法即通过第一个时间加上50秒后的时间


5.关于日期的比较(使用NSData)

     假如现在的时间date和一个exampleDate比较,下面有两种方法, 一种是使用NSComparisonResult对象可以直接比较date对象或转化为字   符串后比较字符串,另一种直接使用比较date的系统方法。
     第一种使用NSComparisonResult对象,使用该对象的比较的结果是一个枚举如下:
typedef NS_ENUM(NSInteger, NSComparisonResult)
                        {NSOrderedAscending = -1L,
                         NSOrderedSame,
                         NSOrderedDescending
};三种枚举类型
      NSOrderedAscending对应的是顺序即前面的时间比较大
      NSOrderedAscending对应的是顺序即后面的时间比较大
      NSOrderedSame对应的是两个时间字符串相等
     如:   NSComparisonResult result = [data compare:exampleData]; 
     如果result等于NSOrderedAscending就代表顺序即现在的时间比较大。

另一种是使用系统方法直接比较早于、晚于、等于这三种情况如下:

BOOL equal = [data isEqual:exampleDate];
BOOL earlier = [data earlierDate:exampleDate];
BOOL later = [data laterDate:exampleDate];

6.- (NSTimeInterval)timeIntervalSinceNow从当前时间开始,经过多少秒到达对象指定时间。
例子如下:
假如exampleStr是2016-10-30 10:10:10 现在的时间是2016-10-30 09:09:09

NSDate * date= [formatter dateFromString:exampleStr];
//过期日期距今还有多少秒
int time = [date timeIntervalSinceNow];
//时
int h = time/3600;
//分
int m = (time%3600)/60;
//秒
int s = time % 60;
return [NSString stringWithFormat:@"%02d:%02d:%02d",h,m,s];
返回的将是01:01:01

7.- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
返回当前对象时间与参数传递的对象时间的相隔秒数,即返回两个 时间相隔的时间秒数

如下:
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:0];
    NSDate *date2 = [NSDate dateWithTimeInterval:50 sinceDate:date];
    NSInteger seconds = [date timeIntervalSinceDate:date2];
    NSLog(@"%ld",(long)seconds);
打印结果为-50即date2比data块50秒

NSCalendar & NSDateComponents部分方法

NSCalendar顾名思义,日历对象封装了对系统日期的计算,包括这一年开始,一周的开始。

1.以一定的格式查分一个时间如以年月日查分

NSDate * date = [NSDate date];//当前时间
NSCalendar * calendar = [NSCalendar currentCalendar];//当前用户的calendar
int unit = NSCalendarUnitYear | NSCalendarUnitMonth |   NSCalendarUnitDay;
NSDateComponents * components = [calendar components:unit fromDate:date];
NSLog(@"%ld年%ld月%ld日" ,(long)components.year,(long)components.month,(long)components.day);

2.可以获得相对时间

NSDateComponents * components = [[NSDateComponents alloc] init];
components.year = 1;
components.month = 1;
components.day = 1;
components.hour =1;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSDate * exampleData = [calendar dateByAddingComponents:components toDate:currentDate options:NSCalendarMatchStrictly];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日";
NSString * dateStr = [formatter stringFromDate:exampleData];
NSLog(@"%@",dateStr);
这样获得的就是从现在起一年零一个月一天一小时后的时间

3.获得两个时间的差值

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
NSString *selfStr = [formatter stringFromDate:date];
NSDate *dateNow = [formatter dateFromString:selfStr];
NSDate *exampleDate = [date dateByAddingTimeInterval:360.0];
// 获得nowDate和exampleDate的差距
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitDay fromDate:dateNow toDate:exampleDate options:0];
NSLog(@"%d年%d月%d日", components.year, components.month, components.day);
这样打印出来的即是两个时间相差的多少年多少月多少日

4.既然有该方法(方法3)那么就可以比较两个时间的具体如:
如果返回的cmps.year==1,那么就表示两个时间差一年;
如果差cmps.year==1就代表差一天

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容