2011-01-05 1 views
1

«31-декабря-2010 9:00 утра до 1:00 вечера»Работа с NSDate и сравнение с датами в Objective C

Возьмите выше NSString, например, мне нужно, чтобы преобразовать его в 2 NSDates например 31-Dec-2010 9:00 AM И 31-Dec-2010 1:00 PM

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

Так 31-дек-2010 10:00 утра попадет внутрь.

Мне интересно. Каковы лучшие практики/трюки с Objective C, чтобы сделать это элегантно?

+0

Для сравнения как конвертирование в UnixTime (это встроенный в obj-c), но это только мое предпочтение! –

+0

Мне всегда нужно думать дольше, чем я хочу, когда читаю код, который использует метод сравнения NSDate: поэтому я написал категорию на NSDate, которая реализовала lessThan :, lessThanOrEqual :, и т. Д., Которая использует сравнение: внизу. Мне гораздо легче читать при кодировании. – nall

+0

Разделите код! :П –

ответ

0

Я закончил тем, что делал это так:

NSString *temp = [[dateString allValues] objectAtIndex:0]; 

    NSLog(@"temp: %@", temp); 


    NSArray *tokens = [temp componentsSeparatedByString: @" "]; 


    NSArray *tokenOneDelimited = [[tokens objectAtIndex:0] componentsSeparatedByString: @"-"]; 


    NSString *dateStr1 = [NSString stringWithFormat: @"%@-%@-%@ %@", [tokenOneDelimited objectAtIndex:2], 
                     [tokenOneDelimited objectAtIndex:1], 
                     [tokenOneDelimited objectAtIndex:0], 
                     [tokens    objectAtIndex:1]]; 

    NSString *dateStr2 = [NSString stringWithFormat: @"%@-%@-%@ %@", [tokenOneDelimited objectAtIndex:2], 
          [tokenOneDelimited objectAtIndex:1], 
          [tokenOneDelimited objectAtIndex:0], 
          [tokens    objectAtIndex:3]]; 

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

    [dateFormatter setDateFormat:@"yyyy-MMM-dd hh:mma"]; 

    NSDate *myDate1 = [dateFormatter dateFromString: dateStr1]; 

    NSDate *myDate2 = [dateFormatter dateFromString: dateStr2]; 

    NSDate *currentDate = [NSDate date]; 

    NSComparisonResult comparison = [currentDate compare: myDate1]; 

    NSComparisonResult comparison2 = [currentDate compare: myDate2]; 


    if ( 
     comparison  == NSOrderedDescending && 
     comparison2  == NSOrderedAscending 
     ) 
    { 
     NSLog(@"is On now");