我有Date类型的对象。
我想比较它们,我用以下方式写了一个if条件:
if (([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped))
{
///execute some condition
}
这种方法我是对还是错?
还有一件事。这样做是对的:
if (dtdate > [m_array objectatIndex:i]
{
}
因为我得到随机行为。
答案 0 :(得分:74)
以下是使用NSDate
方法compare:
if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end
{
// do something
}
从课程参考:
如果...
接收者和另一个日子完全相同, NSOrderedSame。
接收者的时间晚于anotherDate,NSOrderedDescending。
接收者的时间早于另一个日期,NSOrderedAscending。
如果您想比较两个日期并找到它们之间的秒数,您也可以使用timeIntervalSinceDate:
方法。
编辑:
if(([startDate1 compare:[self getDefaultDate]] == NSOrderedSame) || ([startDate1 compare: [self getDefaultDate]] != NSOrderedSame && (([m_selectedDate compare: m_currentDate1] == NSOrderedDescending) || [m_selectedDate compare: m_currentDate1] == NSOrderedSame) && cycleStopped))
答案 1 :(得分:19)
比较NSDates的简便方法(在此处http://webd.fr/637-comparer-deux-nsdate):
#import <Foundation/Foundation.h>
@interface NSDate (Compare)
-(BOOL) isLaterThanOrEqualTo:(NSDate*)date;
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date;
-(BOOL) isLaterThan:(NSDate*)date;
-(BOOL) isEarlierThan:(NSDate*)date;
//- (BOOL)isEqualToDate:(NSDate *)date; already part of the NSDate API
@end
实施:
#import "NSDate+Compare.h"
@implementation NSDate (Compare)
-(BOOL) isLaterThanOrEqualTo:(NSDate*)date {
return !([self compare:date] == NSOrderedAscending);
}
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date {
return !([self compare:date] == NSOrderedDescending);
}
-(BOOL) isLaterThan:(NSDate*)date {
return ([self compare:date] == NSOrderedDescending);
}
-(BOOL) isEarlierThan:(NSDate*)date {
return ([self compare:date] == NSOrderedAscending);
}
@end
简单易用:
if([aDateYouWant ToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now
{
// do your thing ...
}
享受
答案 2 :(得分:4)
我必须承认,我发现&#34;比较&#34; == NSWhatHaveYou业务太难以记住(尽管它是正确的并且有效)。 NSDate还有另外两种方法可以让我的大脑更容易处理:earlyDate和laterDate。
考虑一下:
if ([myDate laterDate:today] == myDate) {
NSLog(@"myDate is LATER than today");
} else {
NSLog(@"myDate is EARLIER than today");
}
// likewise:
if ([myDate earlierDate:today] == myDate) {
NSLog(@"myDate is EARLIER than today");
} else {
NSLog(@"myDate is LATER than today");
}
任一方法都返回一个NSDate对象,该对象比另一个更早或更晚。
答案 3 :(得分:3)
我真的很喜欢卢克的回答,它就像一个魅力。
我使用过这样的东西:
If ([enteredDate compare: [NSDate Date]]== NSOrderedSame || NSOrderedDescending)
{
//Do Something if the enteredDate is later or the same as today
}else
{
//if the enteredDate is before today's date
}
我不确定这是否有帮助,但只是重申卢克所写的内容。
答案 4 :(得分:1)
这是一种简单的方法,可以检查您认为的日期是否比您之前认为的日期更大(例如,将来)。这就是它的作用。
你去吧
- (BOOL)isDateGreaterThanDate:(NSDate*)greaterDate and:(NSDate*)lesserDate{
NSTimeInterval greaterDateInterval = [greaterDate timeIntervalSince1970];
NSTimeInterval lesserDateInterval = [lesserDate timeIntervalSince1970];
if (greaterDateInterval > lesserDateInterval)
return YES;
return NO;
}
这也有效
BOOL *isGreaterDateTruelyGreater = [greaterDate timeIntervalSince1970] > [lesserDate timeIntervalSince1970];
Objective-c处理日期的方式不太直观。基本上,您可以使用NSTimeInterval来获取某个时间点的秒数。它通常给出一个很长的数字,例如我正在写这个1351026414.640865是从1970年开始的时间间隔。
时间点&gt;时间点 1351026415.640865&gt; 1351026414.640865 以上是1秒,所以这是真的。
答案 5 :(得分:0)