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

Сравнивая время двух NSDates, игнорируя компонент даты

Я хочу сравнить два NSDates с NOW ([NSDate date]).

NSDate *date1 = [NSDate dateWithString:@"1982-02-12 07:00:00 +0100"];
NSDate *now   = [NSDate dateWithString:@"2012-01-25 10:19:00 +0100"]; //example
NSDate *date2 = [NSDate dateWithString:@"1989-02-12 15:00:00 +0100"];

Я хотел бы проверить, теперь ли это между датой 1 и датой2. В приведенном выше примере это так. Компонент даты должен быть полностью проигнорирован, поэтому следует сравнивать только компонент времени. Как я мог это сделать?

Спасибо заранее!

4b9b3361

Ответ 1

unsigned int flags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSCalendar* calendar = [NSCalendar currentCalendar];

NSDateComponents* components = [calendar components:flags fromDate:date1];

NSDate* timeOnly = [calendar dateFromComponents:components];

Это даст вам объект даты, где все, кроме часов/минут/секунд, было reset до некоторого общего значения. Затем вы можете использовать стандартные функции сравнения NSDate на них.

Для справки, вот обратный вопрос к вашему: Сравнение двух NSDates и игнорирование компонента времени

Ответ 2

Вы можете создать дату, представляющую начало сегодняшнего дня, и добавить время как компоненты к ней, чтобы получить граничные даты.

NSDate *now = [NSDate date];
NSDate *startOfToday;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startOfToday interval:NULL forDate:now];


NSDateComponents *startComps = [[NSDateComponents alloc] init];
startComps.hour = 7;
startComps.minute = 30;

NSDateComponents *endComps = [[NSDateComponents alloc] init];
endComps.hour = 20;

NSDate *startDate =  [[NSCalendar currentCalendar] dateByAddingComponents:startComps toDate:startOfToday options:0];
NSDate *endDate =  [[NSCalendar currentCalendar] dateByAddingComponents:endComps toDate:startOfToday options:0];

if ([startDate timeIntervalSince1970] < [now timeIntervalSince1970] && [now timeIntervalSince1970]  < [endDate timeIntervalSince1970]) {
    NSLog(@"good");
}

Ответ 3

    NSDateFormatter* formatterDate = [[[NSDateFormatter alloc] init] autorelease]; 

    formatterDate.dateStyle = NSDateFormatterMediumStyle;  // whatever format you like  

    NSDate *first_Date  = [formatterDate dateFromString:@""];
    NSDate  *second_Date  = [formatterDate dateFromString:@""];
    NSDate  *todaysDate =  [NSDate date];


    NSTimeInterval timeIntFormFirstDate = [todaysDate timeIntervalSinceDate:First_Date];
    NSTimeInterval timeIntFronLastDate  = [second_Date timeIntervalSinceDate:todaysDate];

    int interval1 = timeIntFormFirstDate/60;
    int interval2 = timeIntFronLastDate/60;

    if (interval1 >0 && interval2 >0)
    {
        NSLog(@"Today date is between first and second date");
    }