如何比较iOS中的两个日期

时间:2013-11-12 13:44:06

标签: ios objective-c nsdate

我想比较两个日期。这是我写的代码

NSDate *c_date=[NSDate date];

NSDate  *newDate = [c_date dateByAddingTimeInterval:300];

此代码无效?我缺少什么?

4 个答案:

答案 0 :(得分:3)

从NSDate,您可以使用

- (NSComparisonResult)compare:(NSDate *)anotherDate

答案 1 :(得分:0)

您可以使用

- (NSComparisonResult)compare:(NSDate *)other;

将产生

typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};

在您的示例中,您只是使用已知的NSTimeInterval(300)创建两个不同的NSDate对象,因此无法进行比较。

答案 2 :(得分:0)

使用[NSDate timeIntervalSince1970],它将返回一个简单的double值,可以像其他任何值一样用于比较。

NSDate *c_date=[NSDate date];
NSDate *newDate = [c_date dateByAddingTimeInterval:300];
NSTimeInterval c_ti = [c_date timeIntervalSince1970];
NSTimeInterval new_ti = [newDate timeIntervalSince1970];
if (c_ti < new_ti) {
    // c_date is before newDate
} else if (c_ti > new_ti) {
    // c_date is after newDate
} else {
    // c_date and newDate are the same
}

还有[NSDate compare:]方法,您可能会觉得更方便。

答案 3 :(得分:0)

这就是事情(嗯,这可能就是问题,但你的问题并不是完全100%清楚)。 NSDate表示自1970年1月1日以来的秒数间隔。在内部,它使用浮点数(OS X中的两倍,在iOS中不确定)。这意味着比较两个NSDates的平等是干涸和失败,实际上它主要是错过。

如果您想确保一个日期在另一个日期的1/2秒内,请尝试:

fabs([firstDate timeIntervalSinceDate: secondDate]) < 0.5

如果您只希望两个日期都在同一天,则需要使用NSCalendar and date components进行清理。

另见这个答案。

https://stackoverflow.com/a/6112384/169346