1

私が電話したら

NSDateComponents * components = [calendar components:(NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:self];

そして、尋ねるよりも、

components.minute

私に 0 を与えることが保証されますか?

私はやった。このように、しかし 100% 動作することを確認するには、iOS の次のバージョンでも上記の条件を修正する必要があります

- (BOOL)isInTheSameComponents:(NSUInteger)components withDate:(NSDate *)date {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *components1 = [calendar components:components fromDate:self];
    NSDateComponents *components2 = [calendar components:components fromDate:date];

    return ((components1.month == components2.month) && (components1.year == components2.year) && (components1.day == components2.day) && (components1.hour == components2.hour) && (components1.minute == components2.minute));

}

- (BOOL)isInTheSameMonthAndYearWithDate:(NSDate *)date {

    return [self isInTheSameComponents:(NSMonthCalendarUnit | NSYearCalendarUnit) withDate:date];
}
4

1 に答える 1

1

この (未定義の可能性がある) 動作を回避するには、抽出するコンポーネントをテストするだけです。

- (BOOL)isInTheSameComponents:(NSUInteger)components withDate:(NSDate *)date {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *components1 = [calendar components:components fromDate:self];
    NSDateComponents *components2 = [calendar components:components fromDate:date];

    if ((components & NSYearCalendarUnit) != 0 && components1.year != components2.year)
        return NO;
    if ((components & NSMonthCalendarUnit) != 0 && components1.month != components2.month)
        return NO;
    if ((components & NSDayCalendarUnit) != 0 && components1.day != components2.day)
        return NO;
    if ((components & NSHourCalendarUnit) != 0 && components1.hour != components2.hour)
        return NO;
    if ((components & NSMinuteCalendarUnit) != 0 && components1.minute != components2.minute)
        return NO;
    // and any other components you might use
    return YES;
}

このメソッドのより良い名前は次のようになることをお勧めします。

- (BOOL)isEqualToComponents:(NSUInteger)components inDate:(NSDate *)date
{
   ...
}

NSDateカテゴリだと思います)

于 2013-06-05T11:55:23.310 に答える