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

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

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

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

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

很明显,我只要想要 2015-03-13,它后面还多了 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啊!!!很明显法二胜出

时间: 2024-10-14 18:42:30

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

js获取日期年月日

var date = new Date(); date.getYear(); //获取当前年份(2位)date.getFullYear(); //获取完整的年份(4位,1970-????)date.getMonth(); //获取当前月份(0-11,0代表1月)date.getDate(); //获取当前日(1-31)date.getDay(); //获取当前星期X(0-6,0代表星期天)date.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)date.getHours

开发中关于日期的处理:NSDate中取出日期、取出时间等

有时候开发中我们只需要年月日.或者只需要时分秒,刚开始由于对NSDate不是很熟悉,走了很多弯路,特在此记录!!回头要好好把NSDate的文档好好看看   NSDate *date = _datePickerView.date;     NSDateFormatter *formatter = [[NSDateFormatter alloc]init];     // Get Current  Hour     [formatter setTimeStyle:NSDateFormatterSho

[转载] C/C++中怎样获取日期和时间

C/C++中怎样获取日期和时间摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时.时间的获取.时间的计算和显示格式等方面进行了阐述.本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法. 关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元) 1.概念 在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有

java中获取日期和时间的方法总结

1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); date.getTime() ; 还有一种方式,使用 System.currentTimeMillis() ;都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数 一.获取当前时间,   格式为:   yyyy-mm-dd   hh-mm

js从时间戳中获取日期

1,从时间戳中解析出年月日时分秒: time为时间戳: var timestr = new Date(parseInt(time) * 1000); var year = timestr.getFullYear(); var month = timestr.getMonth()+1; var date = timestr.getDate(); var hour = timestr.getHours(); var minute = timestr.getMinutes(); var second

在 Java 8 中获取日期

前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Java 8 中的处理时间/日期默认就线程安全的 DateTimeFormatter 类.那么 Java 8 中该怎么样处理生活中常见的一些日期/时间呢?比如:计算一周后的日期:计算一年前或一年后的日期:检查闰年等. 接下来创建了 20 个基于任务的实例来学习 Java 8 的新特性.从最简单创建当天的日期开始,然

js获取日期时间星期

// js获取日期时间 function getDateTime(){ var dateObj = new Date(); //表示当前系统时间的Date对象 var year = dateObj.getFullYear(); //当前系统时间的完整年份值 var month = dateObj.getMonth()+1; //当前系统时间的月份值 var date = dateObj.getDate(); //当前系统时间的月份中的日 var day = dateObj.getDay(); /

Windows批处理中获取日期和时间

编写Windows批处理时经常会需要使用到日期和时间作为文件名,所以是非常重要的. 如何获取日期呢?格式:  %date%结果:  2012-07-31 如何获取时间呢?格式:  %time%结果:  10:21:21.68 这是获取的系统标准格式的日期和时间,但是有时候我们需要使用规定的格式,怎么办呢? 格式:   %date:~x,y%以及%time:~x,y%说明:   x是开始位置,y是取得字符数 比如说我要获取完整的日期和时间,格式:   %date:~0,4%%date:~5,2%%

实例365(6)---------DateTime.ToString格式化日期,使用DateDiff方法获取日期时间的间隔数

一:DateTime.ToString格式化日期,截图 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TmrFormat { public part