-9

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

NSDate *c_date=[NSDate date];

NSDate  *newDate = [c_date dateByAddingTimeInterval:300];

这段代码不起作用?我错过了什么?

4

4 回答 4

3

从 NSDate,您可以使用

- (NSComparisonResult)compare:(NSDate *)anotherDate
于 2013-11-12T13:45:44.760 回答
0

您可以使用

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

这将产生一个

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

在您的示例中,您只是创建了两个具有已知 NSTimeInterval (300) 的不同 NSDate 对象,因此没有比较。

于 2013-11-12T13:46:23.380 回答
0

使用[NSDate timeIntervalSince1970]which 将返回一个简单的 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:]方法,您可能会发现更方便。

于 2013-11-12T13:47:38.730 回答
0

事情就是这样(嗯,这可能是事情,从你的问题中并不是完全 100% 清楚)。NSDate 表示自 1970 年 1 月 1 日以来的以秒为单位的间隔。在内部,它使用浮点数(在 OS X 中为双精度,在 iOS 中不确定)。这意味着比较两个 NSDate 是否相等是干脆利落的,实际上它大多是未命中。

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

fabs([firstDate timeIntervalSinceDate: secondDate]) < 0.5

如果您只想让两个日期在同一天,则需要使用NSCalendar 和 date components

另请参阅此 SO 答案。

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

于 2013-11-12T14:00:51.693 回答