Objective C ,比较两个日期

发布于 2025-01-06 12:56:39 字数 1084 浏览 6 评论 0原文

我正在尝试比较两个日期,但我根本看不到它是如何工作的...

这是我正在使用的代码:

   NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components setYear:2012];
    [components setMonth:03];
    [components setDay:25];
    NSDate *startDate = [myCalendar dateFromComponents:components];


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components2 setYear:2012];
    [components2 setMonth:04];
    [components2 setDay:25];
    NSDate *endDate = [myCalendar dateFromComponents:components];

    NSComparisonResult result1 = [now compare:startDate];
    NSComparisonResult result2 = [now compare:endDate];

    if (result2 &&

        result1
        ) {
        int x =1;
    }

问题是即使这两个日期是将来的日期,我仍然可以进入 if 条件……有什么理由吗?

I am trying to compare two dates but I can t see how it works at all ...

this is the code that I am using :

   NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components setYear:2012];
    [components setMonth:03];
    [components setDay:25];
    NSDate *startDate = [myCalendar dateFromComponents:components];


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components2 setYear:2012];
    [components2 setMonth:04];
    [components2 setDay:25];
    NSDate *endDate = [myCalendar dateFromComponents:components];

    NSComparisonResult result1 = [now compare:startDate];
    NSComparisonResult result2 = [now compare:endDate];

    if (result2 &&

        result1
        ) {
        int x =1;
    }

the thing is even if the two dates are in the future , i still can get into the if condition ... any reason ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谢绝鈎搭 2025-01-13 12:56:39

result1 和 result2 的值是以下之一。

enum {
    NSOrderedAscending = -1,
    NSOrderedSame,
    NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

唯一一次 (result2 && result1) 不会返回 true 的情况是其中一个日期的计算结果为 false 或 0。仅当其中一个日期与现在完全相同时才会发生这种情况。

if (result1 == NSOrderedAscending) {
    // result1 is in the future
}

if (result1 == NSOrderedDescending) {
    // result1 is in the past
}

The values of result1 and result2 are one of the following.

enum {
    NSOrderedAscending = -1,
    NSOrderedSame,
    NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

The only time (result2 && result1) wouldn't return true is when one of them evaluates to false or 0. This only happens if one of the dates is exactly the same as now.

if (result1 == NSOrderedAscending) {
    // result1 is in the future
}

if (result1 == NSOrderedDescending) {
    // result1 is in the past
}
并安 2025-01-13 12:56:39

NSComparisonResult 不是布尔值。 请参阅文档。根据您想要的输入方式,您应该检查 NSOrderedAscending(现在更早)、NSOrderedSame(相同日期)或 NSOrderedDescending >(现在是以后)。

An NSComparisonResult is not a boolean. See the documentation. Depending on how you want to if to be entered, you should check for NSOrderedAscending (now is earlier), NSOrderedSame (same dates), or NSOrderedDescending (now is later).

谁许谁一生繁华 2025-01-13 12:56:39

试试这个。

NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components setYear:2012];
    [components setMonth:03];
    [components setDay:25];
    NSDate *startDate = [myCalendar dateFromComponents:components];


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components2 setYear:2012];
    [components2 setMonth:04];
    [components2 setDay:25];
    NSDate *endDate = [myCalendar dateFromComponents:components];

    NSComparisonResult result1 = [now compare:startDate];
    NSComparisonResult result2 = [now compare:endDate];

    if (result2 == NSOrderedSame && result1 == NSOrderedSame ) {
        int x =1;
    }  

NSComparisonResult

这些常量用于指示请求中的项目如何排序。

enum {
    NSOrderedAscending = -1,
    NSOrderedSame=0,
    NSOrderedDescending=1
};
typedef NSInteger NSComparisonResult;

try this.

NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components setYear:2012];
    [components setMonth:03];
    [components setDay:25];
    NSDate *startDate = [myCalendar dateFromComponents:components];


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components2 setYear:2012];
    [components2 setMonth:04];
    [components2 setDay:25];
    NSDate *endDate = [myCalendar dateFromComponents:components];

    NSComparisonResult result1 = [now compare:startDate];
    NSComparisonResult result2 = [now compare:endDate];

    if (result2 == NSOrderedSame && result1 == NSOrderedSame ) {
        int x =1;
    }  

NSComparisonResult

These constants are used to indicate how items in a request are ordered.

enum {
    NSOrderedAscending = -1,
    NSOrderedSame=0,
    NSOrderedDescending=1
};
typedef NSInteger NSComparisonResult;
醉生梦死 2025-01-13 12:56:39

通过使用此函数,您可以比较两个日期。这是经过测试的函数,在我这边运行良好。

-(BOOL)dateComparision:(NSDate*)date1 andDate2:(NSDate*)date2{

BOOL isTokonValid;

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");
    isTokonValid = YES;
} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");
    isTokonValid = NO;
} else {
    isTokonValid = NO;
    NSLog(@"dates are the same");
}

return isTokonValid;

}

By using this function you can compare two dates.This is tested function and working fine on my end.

-(BOOL)dateComparision:(NSDate*)date1 andDate2:(NSDate*)date2{

BOOL isTokonValid;

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");
    isTokonValid = YES;
} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");
    isTokonValid = NO;
} else {
    isTokonValid = NO;
    NSLog(@"dates are the same");
}

return isTokonValid;

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文