Работа с NSDate и сравнение с датами в Задаче C - PullRequest
1 голос
/ 06 января 2011

"31 декабря 2010 г. с 9:00 до 13:00"

Возьмите приведенную выше строку NSString, например, мне нужно преобразовать ее в 2 NSDates, например. 31 декабря 2010 года, 9:00 утра и 31 декабря 2010 года, 1:00 вечера

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

Таким образом, 31-го декабря 2010 г. в 10:00 утра будет время.

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

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Как оказалось, NSDateFormatter имеет метод dateFromString, который делает именно то, что вы хотите.

http://blog.evandavey.com/2008/12/how-to-convert-a-string-to-nsdate.html

Официальная документация для NSDateFormatter:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

0 голосов
/ 06 января 2011

В итоге я сделал это так:

    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");
...