如何比较目标C中的两个NSDate对象
我有datetypes的对象..
所以我想比较他们,我已经写了一个如下条件在下面的方式
if(([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped)) { ///execute some condition }
所以,无论我是对还是错?
还有一件事是否正确
if(dtdate > [m_array objectatIndex:i] { }
因为我得到一个随机的行为..
所以请帮助我的朋友和极客
关心Ranjit
这是一个使用NSDate
方法的例子, compare:
if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end { // do something }
从类参考:
如果…
接收者和另一个date完全相等,NSOrderedSame。
接收者晚于其他date,NSOrderedDescending。
接收者比另一个时间更早,NSOrderedAscending。
例如,如果您想比较两个date并查找它们之间的秒数,则还可以使用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))
简单的方法来比较NSDates(在这里findhttp://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 ... }
请享用
我必须承认,我发现“比较”== 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对象,它比其他的要早或晚。
我真的很喜欢卢克的答案,它的作用像一个魅力。
我用了这样的东西:
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 }
我不确定这是否有帮助,但只是重申了卢克写的。
这是一个简单的方法来检查你认为的date是否比你想象的更早(比如说将来)。 这是做什么的。
- 获取当前和未来date的时间间隔(秒和分数秒)
- 如果testing的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处理date的方式并不直观。 基本上你可以使用NSTimeInterval从一个时间点获得秒数。 它通常会给出一个很长的数字,例如,我写这个1351026414.640865就是从1970年开始的时间间隔。
时间点>时间点1351026415.640865> 1351026414.640865以上是1秒前,所以是真的。