NSDate僅獲取日期年月日的實現--即只要年月日,不要多余的小時分鍾秒數


(僅個人鄙見,如有不同,或效率不高還請指出,謝謝)

最近在寫一個背單詞的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 {
2     
3     NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
4     fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CH"];
5     fmt.dateFormat = @"yyyy.MM.dd";
6     
7     NSString *temp = [fmt stringFromDate:date];
8     return [fmt dateFromString:temp];
9 }

如上所示,就是通過NSDateFormatter來略去后半部分

法二(推薦): NSTimeInterval計算

1 - (NSDate *)extractDate:(NSDate *)date {
2     //get seconds since 1970
3     NSTimeInterval interval = [date timeIntervalSince1970];
4     int daySeconds = 24 * 60 * 60;
5     //calculate integer type of days
6     NSInteger allDays = interval / daySeconds;
7     
8     return [NSDate dateWithTimeIntervalSince1970:allDays * daySeconds];
9 }

這個方法就是先獲得當前時間(包含具體時間)與1970年(1970.1.1)的時間差(單位為second),然后總seconds除以一天的seconds,就能計算出整數天數從而省略了多余的具體時間

 

然后用Time Profiler來個小測試,用數據說話,看看兩種方法效率哪種高 (同樣1000條數據依次調用此方法)

法一:

64ms,坑爹呀,至少我在測試app時能感覺到片刻的卡頓感,這也說明了NSDateFormatter 的dateFromString效率非常不高呀

法二:

再也沒有出現 extractDate 這個方法占用那么多時間了,主線程總共也才83ms啊!!!很明顯法二勝出

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM