2013-07-25 1 views
0

У меня есть эта строка, которая передается в этот метод, чтобы произвести 2 раза:Как изменить даты с NSDateComponents

пн по пятницу 7:00 - 10:00 PM

И я используйте этот код, чтобы разделить строку на два раза; открытие и закрытие раз:

-(void)dealWithTimeStrings2:(NSString*)timeString{ 
    <...IRRELEVANT CODE PARSING STRING INTO DATES...> 

    NSLog(@"openDate hours %@, openDate minutes %@", openHours, openMinutes); 
    NSLog(@"closeDate hours %@, closeDate minutes %@", closeHours, closeMinutes); 
    NSLog(@"nowDate hours %@, nowDate minutes %@", nowHours, nowMinutes); 

    //COMPARE HOURS 
    if ([openHours intValue] < [nowHours intValue] < [closeHours intValue]) { 
     NSLog(@"ABIERTO-dateComponents"); 
    } else { 
     NSLog(@"CERRADO-dateComponents"); 
    } 

    NSLog(@"open, now, close %@,%@,%@", openDate,[NSDate date], closeDate); 


    if ([self timeCompare:openDate until:closeDate]) { 
     NSLog(@"OPEN-timeCompare"); 
    } else { 
     NSLog(@"CLOSED-timeCompare"); 
    } 
} 

Это производит эти журналы в консоли:

someDateString 7:00 AM,10:00 PM 
openDate hours 13, openDate minutes 00 
closeDate hours 04, closeDate minutes 00 
nowDate hours 14, nowDate minutes 51 
OPEN-dateComponents 
open, now, close 2000-01-01 13:00:00 +0000,2013-07-25 14:51:16 +0000,2000-01-02 04:00:00 +0000 2013-07-25 08:51:16:486 
CLOSED-timeCompare 

теперь я хочу, чтобы проверить, если настало время падает между временем открытия и закрытия. Но если вы заметили, открытые и закрытые времена в 2000-01-01 & 2000-01-02, тогда как сейчас в 2013-07-24. Проверочный код:

-(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2{ 
    NSCalendar *calendar = [[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = 
    [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]]; 
    NSDate *date = [calendar dateFromComponents:components]; 

    return ([date compare:date1] == NSOrderedDescending && [date compare:date2] == NSOrderedAscending); 
} 

Не удается из-за даты? Тот факт, что его другой год для даты открытия и закрытия по сравнению с нынешней датой?

ответ

0
-(BOOL)timeCompare:(NSDate*)date1 until:(NSDate*)date2 { 
    NSCalendar *calendar = [[NSCalendar alloc] 
initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = 
    [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]]; 
    NSDate *date = [calendar dateFromComponents:components]; 

    return ([date compare:date1] == NSOrderedDescending && [date compare:date2] == NSOrderedAscending); 
} 
+0

Возможно, что-то не так с кодом, который вы написали. Вам не хватало fromDate: но Im также не уверен, что вы используете NSDate * date, и вы не определились. Thx – marciokoko

+0

Я обновил ответ, чтобы исправить метод вызова и объявления. Идея заключалась в создании «нормализованной» даты, поэтому вы можете сравнить ее с другими. –

+0

Хорошо, но тест не прошел. Я просто запустил код выше, как упоминалось, но заменил метод timeCompare тем, который вы дали. Я только что обновил результаты выше. – marciokoko

 Смежные вопросы

  • Нет связанных вопросов^_^