2011-11-18 82 views
28

我有日期类型的对象..如何在客观C上两个NSDate的比较对象

所以我要对它们进行比较,我已经写了,如果条件以下方式

if(([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped)) 
{ 

///execute some condition 

} 

以下所以,无论我是对还是错......在这种方法中?

一两件事是否扶正这种方式是正确的

if(dtdate > [m_array objectatIndex:i] 
{ 

} 

因为我得到一个随机的行为..

所以,请帮助我的朋友和爱好者

问候 兰吉特

+0

有一个叫方法比较:在NSDate的类引用,应该帮助你。 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html – Luke

+0

嘿卢克我该如何检查和“notequalto”条件 – Ranjit

+0

@Ranjit你可以使用具有相同方法调用的逻辑非运算符:'! [d1 isEqualToDate:d2]' – zekel

回答

64

下面是使用NSDate方法的示例,compare:

if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end 
{ 
    // do something 
} 

从类参考:

如果...

接收机和anotherDate是完全彼此相等, NSOrderedSame。

接收者比otherDate,NSOrderedDescending晚。

接收者在时间上早于anotherDate,NSOrderedAscending。

例如,如果您想比较两个日期并查找它们之间的秒数,则还可以使用timeIntervalSinceDate:方法。

编辑:和

#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 

实施:

if(([startDate1 compare:[self getDefaultDate]] == NSOrderedSame) || ([startDate1 compare: [self getDefaultDate]] != NSOrderedSame && (([m_selectedDate compare: m_currentDate1] == NSOrderedDescending) || [m_selectedDate compare: m_currentDate1] == NSOrderedSame) && cycleStopped)) 
+0

嘿卢克感谢您的信息,但我很困惑..你可以通过转换我的上面如果条件在你的方式显示..所以这将是非常有益的..感谢嘿和一件事。 。是否意味着更早或更晚意味着更新 – Ranjit

+0

已更新。只需再次检查括号等! – Luke

+0

@Ranjit NSDates按时间量工作,所以更大的数字是以后的日期。它全部在类参考中:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html – Aberrant

16

简单的方法来比较NSDates(这里找到http://webd.fr/637-comparer-deux-nsdate

#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 ... 
} 

享受

+0

嗨@Pascal我们可以聊天,我有几点怀疑 – Ranjit

+0

嗨@Ranjit。给我发一封电子邮件。 – Pascal

+0

起初,我写了这个,因为添加一个类似乎很麻烦,但是在查看替代方案之后......这个获得我的投票。 – davew

1

这是一个简单的方法来检查你认为的日期是否更大(例如,在未来)相比,你认为更早的日期。这是做什么的。

  1. 获取的时间间隔当前和未来日期(秒和压裂秒)
  2. 返回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从一个时间点获得秒数。它通常给出了一个长的数字,例如作为我是从1970年

时点及时写这1351026414.640865在时间间隔>点 1351026415.640865> 1351026414.640865 以上是向前1秒,所以这是真的。

2

我真的很喜欢卢克的答案,它的工作就像一个魅力。

我以前是这样的:

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 
} 

我不知道是否有帮助,但只是为了重申一下路加写了。

3

我必须承认,我发现“比较”== 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对象,其是更早或更晚比其他。

http://pinkstone.co.uk/how-to-compare-two-nsdates/

+0

感谢您的信息......它真的很容易记住 – Ranjit