1

このテーマに関するすべての質問と回答、およびすべてのチュートリアルを読みましたが、何らかの理由でうまくいきません。2つの日付が同じ日付であることを常に表示します!

誰かが私がそれを理解するのを手伝ってください、私はただ一方が他方よりも大きいかどうか(日付と時刻を含む-秒なし)またはそれらが等しいかどうかを確認したいと思います。

これは私のコードです:

- (BOOL)isEndDateIsBiggerThanCurrectDate:(NSDate *)checkEndDate
{
    NSString *endd = [NSDateFormatter localizedStringFromDate:checkEndDate
                                                      dateStyle:NSDateFormatterShortStyle
                                                      timeStyle:NSDateFormatterShortStyle];

    NSString *curreeeent = [NSDateFormatter localizedStringFromDate:[NSDate date]
                                                      dateStyle:NSDateFormatterShortStyle
                                                      timeStyle:NSDateFormatterShortStyle];

    NSDateFormatter * df = [[NSDateFormatter alloc]init];;

    NSDate * newCurrent = [df dateFromString:endd];
    NSDate * newEnd = [df dateFromString:curreeeent];

    switch ([newCurrent compare:newEnd])
    {
        case NSOrderedAscending:
            return YES;
            break;
        case NSOrderedSame:
            return NO;
            break;
        case NSOrderedDescending:
            return NO;
            break;
    }
}

どうもありがとうございます!

4

4 に答える 4

1

このためには、NSCalenderを使用する必要があります。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger desiredComponents = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit);


NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:[NSDate date]];
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate: checkEndDate];

NSDate *first = [calendar dateFromComponents:firstComponents];
NSDate *second = [calendar dateFromComponents:secondComponents];

NSComparisonResult result = [first compare:second];
if (result == NSOrderedAscending) {
    //checkEndDate is before now
} else if (result == NSOrderedDescending) {
    //checkEndDate is after now
}  else {
    //both are same
}
于 2012-10-23T10:05:09.460 に答える
0

日付と文字列の間で変換するのではなく、実際には時間間隔を使用する必要があります。

次のようなものがあなたのニーズに合うはずです:

//current time
NSDate *now = [NSDate date];

//time in the future
NSDate *distantFuture = [NSDate distantFuture];

//gather time interval
if([now timeIntervalSinceDate:distantFuture] > 0)
{
    //huzzah!
}
于 2012-10-23T09:30:59.913 に答える
0

2つの日付の間の正確な時刻を確認して比較するだけで、答えがわかりました。

- (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;
}
于 2012-10-23T09:54:36.087 に答える
-2

日付を1970年以降の時間間隔に変更して、それで並べ替えてみませんか。非常に単純な数値比較であり、文字列比較よりもはるかに高速であり、1,10,11,2,21,22,3、...のように、常に正しくソートされます。

NSDate *now = [NSDate date];
NSTimeInterval ti = [now timeIntervalSince1970];

それでおしまい。新しいオブジェクトの作成はなく、CPUへの負担がはるかに速く、負担も少なくなります。

ここで秒を取り除く方法を参照してください。ただし、秒の数があるので簡単です。NSDateの秒をゼロに設定する方法はこちらをご覧ください

于 2012-10-23T09:28:43.487 に答える