【问题标题】:Problem with two NSDate两个 NSDate 的问题
【发布时间】:2011-06-10 15:19:41
【问题描述】:

我对这段代码有疑问:

NSDate *today = [[NSDate alloc] init];
if (dateOne == today) {
dataLabel.textColor = [UIColor redColor]; NSLog(@"inside if");}
NSLog(@"today:%@", oggi);
NSLog(@"dateOne:%@", dateOne);

控制台的结果是

2011-06-10 17:19:00.170 Project[678:707] today:2011-06-10 15:19:00 +0000
2011-06-10 17:19:00.174 Project[678:707] dateOne:2011-06-10 15:19:00 +0000

我也尝试了“isEqualToDate”,但代码没有进入“if”

【问题讨论】:

    标签: objective-c xcode if-statement io nsdate


    【解决方案1】:

    我了解到您正在尝试确定给定的 NSDate 是否是今天。为此,您不必在比较中考虑小时、分钟等。这个怎么样:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]];
    NSDate *today = [calendar dateFromComponents:components];
    components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:otherDate];
    NSDate *dateOne = [calendar dateFromComponents:components];
    
    if([today isEqualToDate:dateOne]) {
        ...
    }
    

    isEqualToDate: 方法不会执行工作,因为它会检查给定日期是否与接收者完全一致(精度为亚秒级)。

    == 运算符也不适用于此操作,因为它比较指向对象的指针,检查指针是否指向相同的内存位置。

    【讨论】:

    • 这个答案对我来说非常有用。感谢是小事给你。
    【解决方案2】:

    == 比较指针以查看它们是否指向同一个对象——而不是对象本身的值。要比较日期,请使用-[NSDate isEqualToDate:]

    if ([dateOne isEqualToDate:today]) {
        dataLabel.textColor = [UIColor redColor];
        NSLog(@"inside if");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多