Подтвердить что ты не робот

Как сравнить два объекта NSDate в объекте C

У меня есть объекты типа Date.

Итак, я хочу сравнить их, и я написал условие if следующим образом

if(([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped))
 {

///execute some condition

}

Итак, правильно ли я ошибаюсь... в этом подходе?

Еще одна вещь: правильно ли это право?

if(dtdate > [m_array objectatIndex:i]
{

}

Потому что я получаю случайное поведение.

Итак, пожалуйста, помогите мне с друзьями и выродками.

Отношения Ранджит

4b9b3361

Ответ 1

Вот пример использования метода NSDate, compare:

if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end
{
    // do something
}

Из ссылки на класс:

Если...

Приемник и другое значение точно совпадают друг с другом, NSOrderedSame.

Получатель позже во времени, чем anotherDate, NSOrderedDescending.

Приемник работает раньше времени, чем anotherDate, NSOrderedAscending.

Вы также можете использовать метод timeIntervalSinceDate:, если хотите сравнить две даты и найти между ними секунды, например.

EDIT:

if(([startDate1 compare:[self getDefaultDate]] == NSOrderedSame) || ([startDate1 compare: [self getDefaultDate]] != NSOrderedSame && (([m_selectedDate compare: m_currentDate1] == NSOrderedDescending) || [m_selectedDate compare: m_currentDate1] == NSOrderedSame) && cycleStopped))

Ответ 2

Простой способ сравнения NSDates (найдено здесь http://webd.fr/637-comparer-deux-nsdate):

#import <Foundation/Foundation.h>

@interface NSDate (Compare)

-(BOOL) isLaterThanOrEqualTo:(NSDate*)date;
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date;
-(BOOL) isLaterThan:(NSDate*)date;
-(BOOL) isEarlierThan:(NSDate*)date;
//- (BOOL)isEqualToDate:(NSDate *)date; already part of the NSDate API

@end

И реализация:

#import "NSDate+Compare.h"

@implementation NSDate (Compare)

-(BOOL) isLaterThanOrEqualTo:(NSDate*)date {
    return !([self compare:date] == NSOrderedAscending);
}

-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date {
    return !([self compare:date] == NSOrderedDescending);
}
-(BOOL) isLaterThan:(NSDate*)date {
    return ([self compare:date] == NSOrderedDescending);

}
-(BOOL) isEarlierThan:(NSDate*)date {
    return ([self compare:date] == NSOrderedAscending);
}

@end

Прост в использовании:

if([aDateYouWant ToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now
{
    // do your thing ...
}

Enjoy

Ответ 3

Я должен признать, что я нахожу "сравнение" == NSWhatHaveYou бизнес слишком сложный, чтобы помнить (хотя он правильно и работает). NSDate имеет два других метода, с которыми мой мозг гораздо легче справляется: earlyDate и laterDate.

Рассмотрим это:

if ([myDate laterDate:today] == myDate) {
    NSLog(@"myDate is LATER than today");
} else {
    NSLog(@"myDate is EARLIER than today");
}

// likewise:
if ([myDate earlierDate:today] == myDate) {
    NSLog(@"myDate is EARLIER than today");
} else {
    NSLog(@"myDate is LATER than today");
}

Любой из методов возвращает объект NSDate, который либо раньше, либо позже другого.

http://pinkstone.co.uk/how-to-compare-two-nsdates/

Ответ 4

Мне очень понравился ответ Люка, и это сработало как шарм.

Я использовал что-то вроде этого:

If ([enteredDate compare: [NSDate Date]]== NSOrderedSame || NSOrderedDescending)
{
 //Do Something if the enteredDate is later or the same as today
}else
{
//if the enteredDate is before today date
}

Я не уверен, что это помогает, но просто чтобы повторить то, что написал Люк.

Ответ 5

Это простой способ проверить, будет ли ваша дата больше (например, в будущем) по сравнению с датой, которую вы считаете ранее. Вот что это делает.

  • Возвращает временной интервал (секунды и секунды Frac) как текущей, так и будущей даты
  • возвращает true, если дата вашего тестирования больше (временная привязка) другой даты

Здесь вы идете

- (BOOL)isDateGreaterThanDate:(NSDate*)greaterDate and:(NSDate*)lesserDate{

    NSTimeInterval greaterDateInterval = [greaterDate timeIntervalSince1970];
    NSTimeInterval lesserDateInterval = [lesserDate timeIntervalSince1970];

    if (greaterDateInterval > lesserDateInterval) 
        return YES;

    return NO;
}

Это также работает

BOOL *isGreaterDateTruelyGreater = [greaterDate timeIntervalSince1970] > [lesserDate timeIntervalSince1970];

Способ objective-c имеет дело с датами, менее интуитивным. В основном вы можете использовать NSTimeInterval для получения количества секунд с момента времени. Обычно это дает длинное число, например, поскольку я пишу это 1351026414.640865, это временной интервал с 1970 года.

Точка во времени > точка времени 1351026415.640865 > 1351026414.640865 Вышеуказанное на 1 секунду вперед, так что это правда.