NSDate仅获取日期年月日的实现--即只要年月日,不要多余的小时分钟秒数

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

(仅个人鄙见,如有不同,或效率不高还请指出,谢谢)

最近在写一个背单词的app,根据艾宾浩斯曲线来复习强化记忆,需要计算两次复习的相差天数,正好需要获取一个(不包含当天时间)的日期

比如我们用 [NSDate date]获取当前时间,得到的数据如下:

2015-03-13 14:08:55 +0000

很明显,我只要想要2015-03-13 00:00:00,它后面还多了 14:08:55 (当天的具体时间),这样再转成NSTimeInterval的时候计算两次时间差有可能不符合我的判别复习要求(即未满相隔1天/24*60*60 s 或2天..)

那么后期处理仅获得日期月日年的方法有哪些呢?我个人在写app的时候想到有两种简单的处理方法,稍微比较一下:

法一(不推荐): NSDateFormatter

1- (NSDate *)extractDate:(NSDate *)date {23NSDateFormatter *fmt =[[NSDateFormatter alloc] init];4fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CH"];5fmt.dateFormat =@"yyyy.MM.dd";67NSString *temp =[fmt stringFromDate:date];8return[fmt dateFromString:temp];9}

如上所示,就是通过NSDateFormatter来略去后半部分

法二(推荐): NSTimeInterval计算

1- (NSDate *)extractDate:(NSDate *)date {2//get seconds since 19703NSTimeInterval interval =[date timeIntervalSince1970];4intdaySeconds =24*60*60;5//calculate integer type of days6NSInteger allDays = interval /daySeconds;78return[NSDate dateWithTimeIntervalSince1970:allDays *daySeconds];9}

这个方法就是先获得当前时间(包含具体时间)与1970年(1970.1.1)的时间差(单位为second),然后总seconds除以一天的seconds,就能计算出整数天数从而省略了多余的具体时间

然后用TimePRofiler来个小测试,用数据说话,看看两种方法效率哪种高 (同样1000条数据依次调用此方法)

法一:

64ms,坑爹呀,至少我在测试app时能感觉到片刻的卡顿感,这也说明了NSDateFormatter 的dateFromString效率非常不高呀

法二:

再也没有出现 extractDate 这个方法占用那么多时间了,主线程总共也才83ms啊!!!很明显法二胜出

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航