国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 19:27:16
字體:
來源:轉載
供稿:網友

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

最近在寫一個背單詞的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 19703     NSTimeInterval interval = [date timeIntervalSince1970];4     int daySeconds = 24 * 60 * 60;5     //calculate integer type of days6     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啊!!!很明顯法二勝出

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连山| 庆阳市| 凤城市| 松滋市| 界首市| 柘荣县| 廉江市| 桃园市| 白银市| 唐山市| 韩城市| 高要市| 濉溪县| 江华| 河南省| 绥滨县| 台南市| 大悟县| 晋中市| 平乐县| 北辰区| 临沭县| 翼城县| 舟山市| 潮州市| 南部县| 隆林| 板桥市| 镇雄县| 辽阳市| 宝坻区| 开远市| 新化县| 上饶县| 杭锦旗| 惠来县| 沁源县| 常德市| 拉萨市| 七台河市| 宁强县|