Как сравнить два объекта 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]
{
}
Потому что я получаю случайное поведение.
Итак, пожалуйста, помогите мне с друзьями и выродками.
Отношения
Ранджит
Ответы
Ответ 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 секунду вперед, так что это правда.
Ответ 6
Эта ссылка показывает это наилучшим образом:
http://www.myuiviews.com/2011/01/10/nsdate-comparison-which-is-older.html