NSNumber from NSDate

Я пытаюсь обойти проверку даты, которая отказывается принимать что-либо раньше, чем завтра. Пока что у меня есть следующее:

NSDate *dateY = [NSDate dateWithTimeIntervalSinceNow:-86400];
                // Negative one day, in seconds (-60*60*24)
NSLog(@"%@", [NSDate date]);
    // "yyyy-MM-dd HH:mm:ss Z", accurate assuming Z = +0000
NSLog(@"%@", dateY);
    // "yyyy-MM-dd HH:mm:ss Z", same accuracy (minus one day)

Отлично, но dateY не является NSNumber . Мне нужен NSNumber для сравнения, но я не могу найти ничего, что работает. (Я даже не знаю, как NSNumber может быть 2011-04-14 13:22:29 +0000 , в любом случае ...)

Я могу использовать ] NSDateFormatter для преобразования NSDate в NSString , чтобы можно было взять эту строку и преобразовать ее в требуемый NSNumber (как в отличие от прямого преобразования NSDate в NSNumber , с которым я, похоже, не могу найти помощи), это было бы хорошо.


- (BOOL)validateDueDate:(id *)ioValue error:(NSError **)outError {
    NSDate *dateY = [NSDate dateWithTimeIntervalSinceNow:-86400];
    NSNumber *tis1970 = [NSNumber numberWithDouble:[dateY timeIntervalSince1970]];
    NSLog(@"NSNumber From Date : %@", tis1970);
    NSLog(@"Date From NSNumber : %@", [NSDate dateWithTimeIntervalSince1970:[tis1970 doubleValue]]);

    // Due dates in the past are not valid
    // Enforced that a due date has to be >= today's date
    if ([*ioValue compare:[NSDate date]] == NSOrderedAscending) {
        if (outError != NULL) {
            NSString *errorStr = [[[NSString alloc] initWithString:@"Due date must be today or later."] autorelease];
            NSDictionary *userInfoDictionary = [NSDictionary dictionaryWithObject:errorStr forKey:@"ErrorString"];
            NSError *error = [[[NSError alloc]
                                initWithDomain:TASKS_ERROR_DOMAIN
                                code:DUEDATE_VALIDATION_ERROR_CODE
                                userInfo:userInfoDictionary] autorelease];
            *outError = error;
            }
        return NO;
    } else {
        return YES;
    }
}

Прямо сейчас пользователь не разрешено выбрать дату до завтра. errorStr лжет. Как правило, «раньше сегодня» имеет больше смысла, чем «раньше завтра» для отказа от сохранения даты, поэтому я боролся с этой штукой, чтобы позволить мне использовать вчера вместо сегодняшнего дня, вместо того, чтобы смотреть глубже.

Изменить: Использование NSOrderedSame позволяет выбрать любую дату без ошибок. Так не пойдет.

12
задан Thromordyn 31 August 2012 в 17:29
поделиться