2010-05-12 3 views
0

У меня возникла проблема с форматами даты, на самом деле у меня была возможность поиска событий на основе даты. Для этого Im, сравнивая дату с хранилищем дат в базе данных и получая событие на основе на сегодняшний день для этого я написал код следующим образом:Проблема с dateformatter's в Iphone sdk

-(NSMutableArray*)getSearchAllLists:(EventsList*)aEvent 
{ 
[searchList removeAllObjects]; 
EventsList *searchEvent = nil; 
const char* sql; 
NSString *conditionStr = @" where "; 
if([aEvent.eventName length] > 0) 
{ 
    NSString *str = @"'%"; 
    str = [str stringByAppendingString:aEvent.eventName]; 
    str = [str stringByAppendingString:@"%'"]; 
    conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" eventName like %s",[str UTF8String]]]; 
} 
if([aEvent.eventWineName length]>0) 
{ 
    NSString *str = @"'%"; 
    str = [str stringByAppendingString:aEvent.eventWineName]; 
    str = [str stringByAppendingString:@"%'"]; 
    if([aEvent.eventName length]>0) 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" and (wineName like %s)",[str UTF8String]]]; 
    } 
    else 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@"wineName like %s",[str UTF8String]]]; 
    } 
} 
if([aEvent.eventVariety length]>0) 
{ 
    NSString *str = @"'%"; 
    str = [str stringByAppendingString:aEvent.eventVariety]; 
    str = [str stringByAppendingString:@"%'"]; 
    if([aEvent.eventName length]>0 || [aEvent.eventWineName length]>0) 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" and (variety like %s)",[str UTF8String]]]; 
    } 
    else 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@"variety like %s" ,[str UTF8String]]]; 
    } 
} 
if([aEvent.eventWinery length]>0) 
{ 
    NSString *str = @"'%"; 
    str = [str stringByAppendingString:aEvent.eventWinery]; 
    str = [str stringByAppendingString:@"%'"]; 
    if([aEvent.eventName length]>0 || [aEvent.eventWineName length]>0 || [aEvent.eventVariety length]>0) 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" and (winery like %s)",[str UTF8String]]]; 
    } 
    else 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@"winery like %s" ,[str UTF8String]]]; 
    } 
} 
if(aEvent.eventRatings >0) 
{ 
    if([aEvent.eventName length]>0 || [aEvent.eventWineName length]>0 || [aEvent.eventWinery length]>0 || [aEvent.eventVariety length]>0) 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" and ratings = %d",aEvent.eventRatings]]; 
    } 
    else 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" ratings = %d",aEvent.eventRatings]]; 
    } 
} 
if(aEvent.eventDate >0) 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"dd-MMM-yy 23:59:59"]; 
    NSString *dateStr = [dateFormatter stringFromDate:aEvent.eventDate]; 
    NSDate *date = [dateFormatter dateFromString:dateStr]; 
    [dateFormatter release]; 
    NSTimeInterval interval = [date timeIntervalSinceReferenceDate]; 
    printf("\n Interval in advance search:%f",interval); 
    if([aEvent.eventName length]>0 || [aEvent.eventWineName length]>0 || [aEvent.eventWinery length]>0 || aEvent.eventRatings>0 || [aEvent.eventVariety length]>0) 
    { 
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" and eventDate = %f",interval]]; 
    } 
    else 
    {   
     conditionStr = [conditionStr stringByAppendingString:[NSString stringWithFormat:@" eventDate = %f",interval]]; 
    } 
} 

NSString* queryString= @" select * from event"; 
queryString = [queryString stringByAppendingString:conditionStr]; 
sqlite3_stmt* statement; 
sql = (char*)[queryString UTF8String]; 
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) != SQLITE_OK) 
{ 
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
} 
sqlite3_bind_text(statement, 1, [aEvent.eventName UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(statement, 2, [aEvent.eventWineName UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(statement, 3, [aEvent.eventVariety UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(statement, 4, [aEvent.eventWinery UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_int(statement, 5,aEvent.eventRatings); 
sqlite3_bind_double(statement,6, [[aEvent eventDate] timeIntervalSinceReferenceDate]); 
while (sqlite3_step(statement) == SQLITE_ROW) 
{ 
    primaryKey = sqlite3_column_int(statement, 0);  
    searchEvent = [[EventsList alloc] initWithPrimaryKey:primaryKey database:database]; 
    [searchList addObject:searchEvent]; 
    [searchEvent release]; 
} 
sqlite3_finalize(statement); 
return searchList; 
} 

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

Гай поможет мне избавиться от этого.

Любая помощь будет очень признательна.

Спасибо Monish Calapatapu.

ответ

0

Мне сложно решить эту проблему. Можете ли вы повторно отредактировать пример кода до тех строк, которые показывают проблему? Также поможет пример того, какие значения вы вводите и выходите.