2010-05-12 28 views
0

这里我有一个日期格式化程序的问题,实际上我有一个选项来搜索基于日期的事件。我将这个日期与数据库中的日期存储区进行比较,并获取基于事件的在日本我写的代码如下:与dateformatter在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

我发现很难解决这个问题。您是否可以重新编辑示例代码,直至显示问题的行?此外,您输入和输出什么值的示例也会有所帮助。