首页 文章

如何将“今天”(NSDate)与格式化的字符串日期(dd / MM / yyyy)进行比较?

提问于
浏览
3

我是iOS编程的新手,我一直在寻找一种方法来比较“今天”(NSDate)和格式化的字符串日期(dd / MM / yyyy) .

我've found some good answers with the NSDate' s earlierDatelaterDate 等,但代码似乎在我的项目中不起作用 .

这里是 :

// [book quandd]  is the string :    25/02/2011  (or whatever dd/MM/yyyy date)

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

if ( [[dateFormat dateFromString:[book quandd]] isEqualToDate:today]) {
    NSLog(@"Dates are equal");
}
if ( [[dateFormat dateFromString:[book quandd]] earlierDate:today]) {
    NSLog(@"earlier");
}
if ( [[dateFormat dateFromString:[book quandd]] laterDate:today]) {
    NSLog(@"later");
}

无论我做什么,无论 [book quandd] 中的日期如何,控制台总是写"earlier"和"later",好像它们比今天更早,更早 .

那个“虫子”来自哪里?

例如,有一些简单/更简单的方法来比较今天的日期和26/02/2011吗?

5 回答

  • 0

    使用 timeIntervalSinceNow: 从必要的日期获取差异 .

    您还应尝试获取它们之间的差异,然后转换为字符串 .

  • 0

    NSDate包括日期和时间 . 没有两个NSDate值是相等的,除非时间相同,直到毫秒(如果不是更精细) . 当你执行 [NSDate date] 时,你会获得"now"的确切时间,而如果使用NSDateFormatter将字符串转换为日期(没有时间值),则使用午夜 .

    如果您想查看同一天是否有两个NSDates,您可以使用NSCalendar和NSDateComponents . 或者你可以“欺骗”并将两个日期格式化为没有时间值的日期字符串并比较字符串 .

    - (void) CompareDate:(NSDate*)date1 toDate:(NSDate*)date2 {
        NSDateFormatter* fmt = [NSDateFormatter new];
        [fmt setDateFormat:@"yyyyMMdd"];
        // Note that you should set the appropriate timezone if you don't want the default.
        NSString* date1Str = [fmt stringFromDate:date1];
        NSString* date2Str = [fmt stringFromDate:date2];
        switch ([date1Str compare:date2Str]) {
            case NSOrderedAscending:
                NSLog(@"Date 1 is earlier");
                break;
            case NSOrderedSame:
                NSLog(@"Dates are equal");
                break;
            case NSOrderedDescending:
                NSLog(@"Date 2 is earlier");
                break;
        }
    }
    
  • 0

    用这个

    NSDate *today = [NSDate date];
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd/MM/yyyy"];
    
        if ( [[dateFormat dateFromString:[book quandd]] compare:today]==NSOrderedSame) {
            NSLog(@"Dates are equal");
        }
        if ( [[dateFormat dateFromString:[book quandd]] compare:today]==NSOrderedAscending) {
            NSLog(@"earlier");
        }
        if ( [[dateFormat dateFromString:[book quandd]] laterDate:today]==NSOrderedDescending) {
            NSLog(@"later");
        }
    
  • 1

    您需要使用其中一个日期检查earlyDate的返回值 . 例如:if([date1 earlyDate:date2] == date1)

  • 0

    您的“错误”发生是因为laterDate和earlyDate返回的是更早或更晚的日期对象 . 返回对象始终是非空的,因此if语句都评估为true . 使用它们的正确方法是这样的:

    NSString *book = @"19/08/2014";
    
    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"dd/MM/yyyy"];
    
    NSDate *date = [dateFormat dateFromString:book];
    if ( [date timeIntervalSinceDate:today] == 0) {
        NSLog(@"Dates are equal");
    }
    if ( [date laterDate:today] == today ) {
        NSLog(@"earlier");
    }
    if ( [date laterDate:today] == date) {
        NSLog(@"later");
    }
    

    或者,我使用了timeIntervalSinceDate,它返回第一个日期和第二个日期之间的秒数 .

    NSString *book = @"19/08/2014";
    
    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"dd/MM/yyyy"];
    
    NSDate *date = [dateFormat dateFromString:book];
    if ( [date timeIntervalSinceDate:today] == 0) {
        NSLog(@"Dates are equal");
    }
    if ( [date timeIntervalSinceDate:today] < 0 ) {
        NSLog(@"earlier");
    }
    if ( [date timeIntervalSinceDate:today] > 0) {
        NSLog(@"later");
    }
    

相关问题