• 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啊!!!很明显法二胜出

  • 相关阅读:
    [LeetCode] 310. Minimum Height Trees
    [LeetCode] 722. Remove Comments
    [LeetCode] 243, 244, 245. Shortest Word Distance I, II, III
    [LeetCode] 939. Minimum Area Rectangle
    [LeetCode] 135. Candy
    [LeetCode] 1395. Count Number of Teams
    [LeetCode] 673. Number of Longest Increasing Subsequence
    [LeetCode] 724. Find Pivot Index
    [LeetCode] 1219. Path with Maximum Gold
    [LeetCode] 849. Maximize Distance to Closest Person
  • 原文地址:https://www.cnblogs.com/fu4904/p/4336182.html
Copyright © 2020-2023  润新知