objective-c - ios 날짜 비교




iOS:두 날짜 비교 (4)

stackoverflow와 웹을 많이 검색 한 후, 최선의 방법은 다음과 같습니다.

- (BOOL)isEndDateIsSmallerThanCurrent:(NSDate *)checkEndDate
{
    NSDate* enddate = checkEndDate;
    NSDate* currentdate = [NSDate date];
    NSTimeInterval distanceBetweenDates = [enddate timeIntervalSinceDate:currentdate];
    double secondsInMinute = 60;
    NSInteger secondsBetweenDates = distanceBetweenDates / secondsInMinute;

    if (secondsBetweenDates == 0)
        return YES;
    else if (secondsBetweenDates < 0)
        return YES;
    else
        return NO;
}

시간 차이로 변경할 수도 있습니다.

즐겨!

1 편집

날짜를 dd / MM / yyyy 형식으로 만 비교하려면 NSDate* currentdate = [NSDate date]; 사이에 다음 행을 추가해야합니다 NSDate* currentdate = [NSDate date]; && NSTimeInterval distance

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]
                          autorelease]];

NSString *stringDate = [dateFormatter stringFromDate:[NSDate date]];

currentdate = [dateFormatter dateFromString:stringDate];

나는 NSDate 를 다른 두 NSDate 와 비교해야하며 NSOrderAscendingNSOrderDescending 시도하지만 내 날짜가 다른 두 날짜와 동일하면 시도합니까?

예 : myDate = 24/05/2011 및 기타 2 = 24/05/201124/05/2011 이 있으면 사용할 수 있습니까?


나는 당신이 리턴 값이 비교 함수에 무엇인지 묻는다.

날짜가 같으면 NSOrderedSame 을 반환합니다.

오름차순 (두 번째 arg> 첫 번째 arg) NSOrderedAscending 반환합니다.

내림차순 인 경우 (두 번째 arg <1st arg) NSOrderedDescending 반환합니다.


먼저 날짜 비교를 위해 다음 함수를 확인하십시오. 두 개의 NSDate 객체를 만들고 함수에 전달하십시오. viewDidload에 코드의 줄을 추가하거나 시나리오에 따라 코드를 추가하십시오.

-(void)testDateComaparFunc{

NSString *getTokon_Time1 = @"2016-05-31 03:19:05 +0000";
NSString *getTokon_Time2 = @"2016-05-31 03:18:05 +0000";
NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
NSDate *tokonExpireDate1=[dateFormatter dateFromString:getTokon_Time1];
NSDate *tokonExpireDate2=[dateFormatter dateFromString:getTokon_Time2];
BOOL isTokonValid = [self dateComparision:tokonExpireDate1 andDate2:tokonExpireDate2];}

여기에 함수가있다.

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

BOOL isTokonValid;

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

}

return isTokonValid;}

단순히 날짜와 테스트 위의 기능을 변경하십시오 :)


Apple의 NSDate compare: 문서에 따르면 다음과 NSDate compare:

수신기의 시간 순서와 다른 날짜를 나타내는 NSComparisonResult 값을 반환합니다.

- (NSComparisonResult)compare:(NSDate *)anotherDate

매개 변수 anotherDate

수신기를 비교할 날짜입니다. 이 값은 nil이 아니어야합니다. 값이 nil이면 비헤이비어가 정의되지 않으며 이후 버전의 Mac OS X에서 변경 될 수 있습니다.

반환 값

만약:

리시버와 anotherDate는 정확히 동일합니다. NSOrderedSame

수신기가 나중에 anotherDate, NSOrderedDescending 보다 시간이 오래되었습니다.

리시버는 anotherDate, NSOrderedAscending 보다 시간이 빠릅니다.

다른 말로:

if ([date1 compare:date2] == NSOrderedSame) ...

이 경우 읽고 쓰는 것이 더 쉬운 경우가 있습니다.

if ([date2 isEqualToDate:date2]) ...

이 문서는 Apple Documentation을 참조하십시오.





nsdate