两个NSDate之间的区别

16

我使用日期时间选择器获取了两个NSDate对象。现在,我想要计算这两个NSDate对象之间的天数差异。请问如何找到两个NSDate对象之间的差异。

能否给我一些解决方案。

非常感谢。


可能是两个NSDates之间的天数的重复问题。 - jscs
3个回答

57

这里有一个小技巧 - 不仅可以计算天数:

// Assuming you have fistDate and secondDate

unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth;

NSDateComponents *conversionInfo = [currCalendar components:unitFlags fromDate:fistDate   toDate:secondDate  options:0];

int months = [conversionInfo month];
int days = [conversionInfo day];
int hours = [conversionInfo hour];
int minutes = [conversionInfo minute];

这非常有帮助 - 特别是在格式化字符串时,比如:

[NSString stringWithFormat:@"%d months , %d days, %d hours, %d min", months, days, hours, minutes];

愉快地编程 :)


@Dave DeLong 是的,人们对于这类问题仍然满足于使用浮点数和整数来进行复杂计算,这真是遗憾。 - martin
那么,我们应该如何处理firstDate和secondDate? - Gargo
3
NSHourCalendarUnit已更改为NSCalendarUnitHour,分钟、日和月也是如此。看来那天苹果的工程师有点儿糊涂了。 - GeneCode

25

NSDate reference是一份非常好的文档,涉及IT技术。以下是链接:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate

如果您想要计算时间间隔差异,那么这就是您需要的东西。
对于天数(因为不是每一天都有相同数量的分钟、小时),您可以参考下面的Martins答案,并使用[NSCalendar currentCalendar]的NSDateComponents。

每天的小时数不一样吗???我以为每天都有24个小时?你能解释一下这是怎么回事吗? - GeneCode
地球的自转并不是均匀的,有些日子可能比其他日子更长。 - Balázs Vincze

2

以下是一个 Swift 实现的例子(我经常在调试网络请求和 JSON 解析等问题时使用它):

let date1 = NSDate()

// do some long running task

let date2 = NSDate()
print(date2.timeIntervalSinceDate(date1))

// you can also do this in one line, of course:
print(NSDate().timeIntervalSinceDate(date1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接