比较两个日期

11

我该如何比较两个不同的日期以找出哪个日期更晚?例如,在下载一些数据后,我会将一个日期存储在date1中,并将当前日期存储在date2中。然后我需要检查哪一个日期更大/更晚:类似于if(date1>date2)

如何比较两个不同的日期以找出哪个日期更晚?例如,我会将一个日期存储在date1中,在下载一些数据后,将当前日期存储在date2中。然后我需要检查哪个日期更大/更晚:类似于if(date1>date2)


1
在发帖提问之前,请使用右上角的搜索框,在 Stack Overflow 上检查是否已经有人提出了同样的问题。例如,搜索“比较两个 NSDate”。 - user557219
4个回答

25

类似这样:

    NSDate* timeNow = [NSDate date];

    // If less than 30 seconds, do something
    if ([timeNow timeIntervalSinceDate:anEarlierTime] < 30.0f)
    {
        // Do something
    }

谢谢您的回复,我有一个小澄清,如果时间间隔是24小时(1天),我该如何检查呢? - Kiran
2
嗯,一分钟有60秒,一小时有60分钟,24小时就是86,400秒了 :-) - Dave F

25

你可以使用NSDate的compare:方法:

NSComparisonResult result = [Date2 compare:Date1];

if(result==NSOrderedAscending)
    NSLog(@"Date1 is in the future");
else if(result==NSOrderedDescending)
    NSLog(@"Date1 is in the past");
else
    NSLog(@"Both dates are the same");

3
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
NSDate *dt1 = [[NSDate alloc] init];
NSDate *dt2 = [[NSDate alloc] init];
dt1 = [df dateFromString:@"2011-02-25"];
dt2 = [df dateFromString:@"2011-03-25"];
NSComparisonResult result = [dt1 compare:dt2];
switch (result)
{
    case NSOrderedAscending: NSLog(@"%@ is greater than %@", dt2, dt1); break;
    case NSOrderedDescending: NSLog(@"%@ is less %@", dt2, dt1); break;
    case NSOrderedSame: NSLog(@"%@ is equal to %@", dt2, dt1); break;
    default: NSLog(@"erorr dates %@, %@", dt2, dt1); break;
}

3

这是我用来比较带有时区的日期的方法,适用于iOS 6。

        NSComparisonResult result = [timeStamp compare:serverDate];
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
        switch (result)
        {
            case NSOrderedAscending:
                NSLog(@"%@ is greater than %@", [df stringFromDate:serverDate], [df stringFromDate:timeStamp]);
                break;
            case NSOrderedDescending:
                NSLog(@"%@ is less %@", [df stringFromDate:serverDate], [df stringFromDate:timeStamp]);
                break;
            case NSOrderedSame:
                NSLog(@"%@ is equal to %@", [df stringFromDate:serverDate], [df stringFromDate:timeStamp]);
                break;
            default:
                NSLog(@"erorr dates %@, %@", [df stringFromDate:serverDate], [df stringFromDate:timeStamp]);
                break;
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接