0

I was wondering how I could use NSDate within an if statement - I want to update a UILabel depending what the date is, currently I have the following code to determine the date but don't know how to actually get this within an if statement.

NSDate* date = [NSDate date];
    NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
    [formatter setDateFormat:@"dd/MM/yyyy"];

    NSString *dateString = [formatter stringFromDate:date];
    dateLabel.text = dateString;

    if (dateString  == @"25/05/2012") {
        NSLog(@"It's the 25th!");
    }
    else {
        NSLog(@"Not it's not...");
    }

Thanks a lot!

4

5 に答える 5

3

文字列を比較するには、isEqualToString:notを使用できます==(これにより、ポインターを比較します)。
日付を比較するには、を使用できますisEqualToDate:

于 2012-05-26T07:55:36.750 に答える
3

2 つの文字列を比較する場合は、isEqualToString:

if ([dateString isEqualToString:@"25/05/2012"]) {
    NSLog(@"It's the 25th!");
}
else {
    NSLog(@"Not it's not...");
}

isEqualToString: NSString クラス リファレンス内

NSDate2つの使用を比較したい場合isEqualToDate:

[date1 isEqualToDate:date2]

isEqualToDate: NSDate クラス リファレンス内

于 2012-05-26T07:54:16.600 に答える
0

実際に達成したいことに応じて、次の呼び出しを使用できます。

日付:

- (BOOL)isEqualToDate:(NSDate *)anotherDate
- (NSComparisonResult)compare:(NSDate *)anotherDate

NS文字列:

- (BOOL)isEqualToString:(NSString *)aString
于 2012-05-26T08:20:25.607 に答える
0

前述のように、==ポインタが等しいかどうかをチェックします。or 、またはオブジェクトの他のクラスの内容を一致させたい場合は、そのクラスのドキュメントとメソッドを確認してください。( hasと; hasとだけでなく、いくつかのより特殊な比較方法もあります。NSStringNSDateisEqual...compare...NSDateisEqualToDate:compare:NSStringisEqualToString:compare:

ただし、日付を照合する目的によっては、に対して比較しNSDatesたりisEqualToDate:、結果を確認したりしても、意図したとおりにならない場合があります。は暦日全体を表すのではなく、特定の瞬間を表します。したがって、 を表すと を表すがある場合、それらは等しいか、 として比較されます。compare:NSOrderedSameNSDateNSDate5/25/2012 1:53:13 AM PDT5/25/2012 1:55:01 AM PDTNSOrderedSame

と 文字列の比較で行おうとしていることは、 2 つが同じ暦日を表しているNSDateFormatterかどうかをチェックするのにある程度機能します (文字列の内容をを使用する代わりにと比較すると仮定します)。あなたが思っているよりも一般的です。Apple は、このような比較専用の API を提供しています。日付と時刻のプログラミング ガイドには、それらについて詳しく説明しているセクションがあります。NSDatesisEqualToString:==

于 2012-05-26T09:05:39.397 に答える
0

NSDate が提供する

- (BOOL)isEqualToDate:(NSDate *)anotherDate
- (NSComparisonResult)compare:(NSDate *)anotherDate

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 ...
}
于 2012-08-13T13:14:19.877 に答える