0

我想知道如何在 if 语句中使用 NSDate - 我想根据日期更新 UILabel,目前我有以下代码来确定日期,但不知道如何在 if 语句中实际获取它。

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...");
    }

非常感谢!

4

5 回答 5

3

如果要比较两个字符串,请使用isEqualToString:

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

isEqualToString:在 NSString 类中引用

如果你想比较两个NSDate使用isEqualToDate:

[date1 isEqualToDate:date2]

isEqualToDate:在 NSDate 类中引用

于 2012-05-26T07:54:16.600 回答
3

要比较字符串,您可以使用isEqualToString:not ==(这样您正在比较指针)。
要比较日期,您可以使用isEqualToDate:.

于 2012-05-26T07:55:36.750 回答
0

根据您实际想要实现的目标,您可以使用下一个调用:

NSD日期:

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

NS字符串:

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

如前所述,==检查指针是否相等。如果您想匹配or或任何其他对象类的内容,请查看该类的文档以了解和方法。( has and ; has and以及几种更专业的比较方法。NSStringNSDateisEqual...compare...NSDateisEqualToDate:compare:NSStringisEqualToString:compare:

但是,根据您在匹配日期中的目标,比较NSDatesisEqualToDate:检查compare:反对的结果NSOrderedSame可能不会达到您想要的效果。AnNSDate不代表整个日历日,而是代表特定的时间点。因此,如果您有一个NSDate代表5/25/2012 1:53:13 AM PDT和一个代表5/25/2012 1:55:01 AM PDT,它们将相等或比较为NSOrderedSame

您使用NSDateFormatterand 字符串比较的目的将有助于检查两个是否NSDates代表相同的日历日(假设您将字符串内容与isEqualToString:而不是 using进行比较==),但它有点笨拙,并且在某些边缘情况下会失败比你想象的更常见。Apple 提供专门用于此类比较的 API;日期和时间编程指南中有一节很好地解释了它们。

于 2012-05-26T09:05:39.397 回答
0

NSDate 提供

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

这是一个类别(可在此处找到http://webd.fr/637-comparer-deux-nsdate),它提供了一种比较 NSDates 的简洁方法:

#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 回答