首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNumber来自NSDate

NSNumber来自NSDate
EN

Stack Overflow用户
提问于 2011-04-14 13:50:28
回答 2查看 10.8K关注 0票数 12

我试图绕开一个日期验证,它拒绝比明天早拿任何东西。

到目前为止我有这样的想法:

代码语言:javascript
复制
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,而我似乎两者都找不到帮助),那就可以了。

代码语言:javascript
复制
- (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可以在没有错误的情况下选择任何日期。那样不行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-14 13:59:14

您可以将NSDate转换为如下所示的NSNumber

代码语言:javascript
复制
NSDate *aDate = [NSDate date];
NSNumber *secondsSinceRefDate = [NSNumber numberWithDouble:[aDate timeIntervalSinceReferenceDate]];

然后转换回来,就像:

代码语言:javascript
复制
aDate = [NSDate dateWithTimeIntervalSinceReferenceDate:[NSNumber doubleValue]];
票数 27
EN

Stack Overflow用户

发布于 2011-04-14 13:57:39

获得NSNumber所需的全部条件是

代码语言:javascript
复制
NSDate *dateY = [NSDate dateWithTimeIntervalSinceNow:-86400];
NSNumber *tis1970 = [NSNumber numberWithDouble:[dateY timeIntervalSince1970]];
NSLog(@"NSNumber From Date : %@", tis1970);
NSLog(@"Date From NSNumber : %@", [NSDate dateWithTimeIntervalSince1970:[tis1970 doubleValue]]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5664276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档