我有Date类型的对象。
我想比较它们,我用下面的方式写了一个if条件:
if (([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped))
{
///execute some condition
}
我这样做是对还是错?
还有一点。这条路对吗?
if (dtdate > [m_array objectatIndex:i]
{
}
因为我得到了随机行为
下面是使用NSDate
方法的示例,compare:
if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end
{
// do something
}
来自类引用:
如果……
接收器和anotherDate彼此完全相等,NSOrderedSame .
接收方时间晚于anotherDate, nsordereddescent .
接收时间早于anotherDate, 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))
比较nsdate的简单方法(在这里找到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 ...
}
享受我必须承认,我发现"compare" == NSWhatHaveYou的业务太复杂了,难以记住(即使它是正确的,它是有效的)。NSDate还有另外两个方法,我觉得它们更容易处理:alererdate和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对象,该对象可能早于或晚于另一个方法。
http://pinkstone.co.uk/how-to-compare-two-nsdates/我真的很喜欢Luke的回答,而且效果很好。
我用的是这样的:
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
}
我不确定这是否有帮助,但只是重申一下卢克写的
这是一种简单的方法来检查您认为日期是否较大(例如:在未来)与你认为更早的日期相比。下面是它的作用:
- 获取当前和未来日期的时间间隔(秒和压裂秒) 如果您的测试日期(时间参考)大于其他日期,则
- 返回true。
给你
- (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年开始的时间间隔。
时间点>时间点1351026415.640865> 1351026414.640865以上内容提前了1秒,所以是正确的
这个链接以最好的方式展示了它:
http://www.myuiviews.com/2011/01/10/nsdate-comparison-which-is-older.html