码迷,mamicode.com
首页 > 其他好文 > 详细

date比较

时间:2015-03-18 06:31:30      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:date

应用中至少有两个日期,你想知道它们之间的关系。例如,某个日期是否在另一个日期之前?两个日期之间相差多少天?

解决方案

对于简单的比较来说,可以使用内置的NSDate比较函数。要想知道从某个日期开始经过了多少天,需要有指向系统日历的引用和两个日期。

说明

本攻略假定你使用5.2节中设置的iPhone发布日期,并将之与今天的日期进行比较。可以通过NSDate的date函数来获得今天的日期。

首先比较iPhone发布日期是否是今天,请使用isEqualToDate:函数并将需要比较的日期作为参数传递进来,该函数返回一个布尔值:
NSDate *todaysDate = [NSDate date];

if([todaysDate isEqualToDate:iPhoneReleaseDate])
    NSLog(@"The iPhone was released today!");
else
    NSLog(@"The iPhone was released on some other date");

要想判断某个日期是否早于另一个日期,请使用earlierDate:函数并将另一个日期作为参数传递进来,该函数返回更早的那个日期:
NSDate *earlierDateIs = [todaysDate earlierDate:iPhoneReleaseDate];

还可以进行相反比较,判断哪个日期更晚:
NSDate *laterDateIs = [todaysDate laterDate:iPhoneReleaseDate];

要想获得两个日期之间相差的秒数,请使用timeIntervalSinceDate:函数并将第二个日期作为参数传递进来。你会得到一个双精度浮点数,其值为两个日期间相差的秒数。这是个名为NSTimeInterval(你会发现其他的日期方法使用了NSTimeInterval)的typedef声明。

可以通过系统日历与NSDateComponents类获得关于日期比较的更详细信息,这会以你需要的格式返回两个日期间相差的时间。因此,如果想要知道天数、小时数、分钟数、年数、月数或是其中的组合,那么可以从中受益。

首先需要获得指向用户系统日历的引用:
NSCalendar *systemCalendar = [NSCalendar currentCalendar];
接下来,通过对NSCalendar常量进行按位或运算来指定采用的时间单位:
unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |
NSDayCalendarUnit;

注意:

位操作是处理底层二进制信息的一种方式。如你所知,计算机以一系列1和0来表示信息(比如00000011表示数字3)。位操作会比较两部分信息的二进制表示并根据比较得到结果。按位或表示如果两个信息中有一个为1,那么结果就为1。

换句话说,我想知道两个日期间相差的年数、月数与天数。表5-1列出了这里可以使用的常量。

可以通过NSCalendar的components:fromDate:toDate:options:函数来返回NSDateComponents对象,对象中的数据描述了根据指定的NSCalendar常量,计算得出的两个日期间的时间差:
NSDateComponents *dateComparisonComponents = [systemCalendar  components:unitFlags
fromDate:iPhoneReleaseDate
               toDate:todaysDate
options:NSWrapCalendarComponents];

可以访问相应的属性以获得所需的信息。例如,可以通过dateComparisonComponents.year属性获得年数。参见程序清单5-3。


date比较

标签:date

原文地址:http://5828666.blog.51cto.com/5818666/1621649

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!