zoukankan      html  css  js  c++  java
  • 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啊!!!很明显法二胜出

  • 相关阅读:
    安装CentOS--设置网络_2
    VMware虚拟机中涉及的3种常见网络模式
    Java_静态变量
    安装CentOS--设置网络_1
    队列的基本操作-队列的链式存储结构(带图详细)
    单链表的基本操作-单链表的创建、插入、删除结点等
    Linux下设置mysql不区分大小写
    python课后练习当前目录下有一个文件名为score3.txt的文本文件, 存放着某班学生的学号和其两门专业课的成绩。
    实现斐波那契数列算法-递归和非递归
    算法之除去递增有序单向链表中的重复元素
  • 原文地址:https://www.cnblogs.com/fu4904/p/4336182.html
Copyright © 2011-2022 走看看