2011-11-18 34 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