我想比较两个日期。这是我写的代码
NSDate *c_date=[NSDate date];
NSDate *newDate = [c_date dateByAddingTimeInterval:300];
此代码无效?我缺少什么?
答案 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进行清理。
另见这个答案。