【问题标题】:fetching date from sqlite and display in UILabel view从 sqlite 获取日期并在 UILabel 视图中显示
【发布时间】:2014-07-21 09:08:21
【问题描述】:

您好,在我的应用程序中,我的本地数据库中有日期,格式为 dd-mm-yy。现在我想从我的本地数据库中获取与月份相关的日期,例如 jan 意味着我想从我的本地数据库中获取所有 jan 日期。我想分别获取日期 dd 月份和年份,并存储到我的 UILabel 中的字符串显示中。提取不正常,请帮帮我。

在本地数据库中,我的日期就像我打印数组时一样,它的显示就像这个数组11

"29-7-2014",
"15-8-2014",
"19-7-2014",
"20-7-2014",
"20-9-2014",
"18-9-2014",
"20-9-2014",

我的代码数据库获取代码。

-(void)GETVALUE{

   [self openDB1];
   array11 =[[NSMutableArray alloc]init];
   array1 =[[NSMutableArray alloc]init];
   NSString *sql =[NSString stringWithFormat:@"SELECT * FROM cl"];
sqlite3_stmt *statement;
 if (sqlite3_prepare_v2(db1, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement)== SQLITE_ROW) {

         char *field2 = (char *)sqlite3_column_text(statement, 1);
         NSString *field2Str =[[NSString alloc]initWithUTF8String:field2];
         char *field1 = (char *)sqlite3_column_text(statement, 2);
         NSString *field1Str =[[NSString alloc]initWithUTF8String:field1];

         NSString *str = [[NSString alloc]initWithFormat:@"%@",field1Str];
         NSString *str1 = [[NSString alloc]initWithFormat:@"%@",field2Str];

         [array11 addObject:str];
         [array1 addObject:str1];


        }

    }

 }

我的比较代码。

  mont = @"7";
  yr =@"2014";

  NSInteger mon = [mont intValue];
  NSInteger yea = [yr intValue];
  [self GETVALUE];
   NSCalendar *gregCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

   NSDateComponents *dateComponent = [gregCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];

     NSArray *dobArray = array1;
     NSArray *messagesArray = array11;
     NSLog(@"%@",dobArray);
   for (NSString *dobStr in dobArray) {
       NSArray *components = [dobStr componentsSeparatedByString:@"-"];
    if(components.count>3) {
        NSInteger aDay = [[components objectAtIndex:0] integerValue];
        NSInteger aMonth = [[components objectAtIndex:1] integerValue];
        NSInteger aYear = [[components objectAtIndex:2] integerValue];

        if(aMonth == mon && aYear == yea) {

            [dateComponent setDay:aDay];
            [dateComponent setMonth:aMonth];
            [dateComponent setYear:aYear];

            UIDatePicker *dp = [[UIDatePicker alloc] init];
            [dp setDate:[gregCalendar dateFromComponents: dateComponent]];
            //inStr = [NSString stringWithFormat:@"%@",dp];
           // NSLog(@"%@ss", inStr);
        }
    }
}

我已经使用了上面的代码,但是它没有工作它没有检查请告诉我如何实现这个。

谢谢。

【问题讨论】:

  • 你能显示你的 [array11 addObject:str] 的结果吗? [array1 addObject:str1];
  • @Anbu.Karthik 我已经在上面给出了请查看

标签: ios sqlite date uilabel


【解决方案1】:

以下代码中的更改替换为您的 for 循环 更新

 for (int index = 0 ; index <dobArray.count ; index++) {
   NSArray *components = [dobStr componentsSeparatedByString:@"-"];
   if(components.count>3) {
         NSString *components = [dobArray objectAtIndex:index];
        NSDateFormatter *dateFormet = [[NSDateFormatter alloc]init];
        [dateFormet setDateFormat:@"dd-MM-yyyy"];
        NSDate *date = [dateFormet dateFromString:components];

        [dp setDate:date];
   }
 }

现在试试。它会工作的

【讨论】:

  • 数据也包含带有斜线的日期 - 查看上面的数据转储。
  • @Joge 请在这里我必须检查月份和年份的情况,就像我检查了我的代码一样
【解决方案2】:

你的代码很冗长,包含了很多奇葩,比如

mont = @"7";
NSInteger mon = [mont intValue];

第一行无关紧要,你可以写7intValue 返回 int,而 integerValue 返回 NSInteger

NSString *str1 = [[NSString alloc]initWithFormat:@"%@",field2Str];

你可以使用field2Str

您的变量名称选择不当 - 这就是您感到困惑的原因,您的代码的每个外部读者也是如此。

array1,由于某种原因被重命名为dobArray,你从数据库中存储str1s,这又是field2Str。您的比较代码容易出现潜在错误,但它应该适用于您发布的数据。然而,如果你点击了日期,你就分配了一个日期选择器并且什么都不做。看来您应该初始化一个日期选择器,例如通过情节提要,然后设置该选择器的date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多