【问题标题】:Date format needed to work 'order by date' query in iOS在 iOS 中进行“按日期排序”查询所需的日期格式
【发布时间】:2016-08-29 16:54:44
【问题描述】:

我在 我的 iOS 应用程序的 SQLite 中存储数据列表。在 DB 中,“addOn”一列以“30-Jul-2014 07:43:20”格式存储来自服务器响应的日期。 在这里,我在“addOn”列上尝试了很多东西,但无法按 ASC/DESC 顺序获取日期。 其他一些细节是

  1. “addOn”列的日期类型是 DATETIME。
  2. 尝试在 DESC 中获取的查询是:

"SELECT * FROM tableName ORDER BY datetime(addedOn) DESC LIMIT 1" & "SELECT * FROM tableName ORDER BY date(addedOn) DESC LIMIT 1" & "SELECT * FROM tableName ORDER BY addedOn DESC LIMIT 1".

但是所有这些查询都没有给我预期的结果。

  1. 我尝试将此日期转换为另一种格式,同时将其插入数据库中,但将此日期格式转换为其他日期格式(如'yyyy-MM-dd HH:mm:ss')根本不起作用。 对于以下代码:

    NSString *dateString = @"30-Jul-2014 07:43:20"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *dateFromString = [[NSDate alloc] init]; dateFromString = [dateFormatter dateFromString:dateString];

    NSString *stringDate = [dateFormatter stringFromDate:dateFromString];
    NSLog(@"stringDate %@", stringDate);
    

所以我的问题是可以将这种类型格式转换为任何其他格式,或者还有什么我遗漏的东西。请分享您的想法并建议我需要做的更改。任何帮助表示赞赏。

【问题讨论】:

    标签: ios objective-c iphone sqlite


    【解决方案1】:

    您的 dataFormat 似乎有误。试试下面的 DateFormat。

    [dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];
    
    NSDate *date = [dateFormatter dateFromString:yourDateString];
    

    这将为您提供准确的日期。

    希望对你有帮助..

    【讨论】:

    • Balaji 谢谢,但此处插入工作正常,但以 ASC/DESC 顺序获取日期失败,我已尝试使用上述查询,但所有三个都没有给我预期的结果。查询中有什么需要改变的吗?
    • 我认为您在检索时不需要更改任何内容。您只需更改 dateFormat 字符串。然后尝试将其插入数据库。希望它会工作......
    【解决方案2】:
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:YES];
    

    试试 NSPredict 并使用上面的代码

    【讨论】:

      【解决方案3】:

      我的数据库带有 SQLite,日期格式为“dd-mmm-yyyy HH:mm:ss” 以下查询在其中起作用..

      SELECT * FROM TableName ORDER BY addedOn ASC

      ASC|DESC 可以根据需要使用..

      如果你想转换你的日期格式而不是如下:

      NSString * dateStr = @"30-Jul-2014 07:43:20";
      NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
      [dateFormat setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];
      
      NSDate *date = [dateFormat dateFromString:dateStr];
      [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
      NSString *finalString = [dateFormat stringFromDate:date];
      

      这里的输出是 finalString = "2014-07-30 07:43:20"

      【讨论】:

        【解决方案4】:

        感谢大家抽出宝贵的时间,并建议我做一些我需要做的改变。 将 NSDate 原样存储在 DB 中,而不是在 NSString 中转换 NSDate 然后插入 DB 解决了我的问题,而代码几乎没有变化

        我的代码现在有两种情况可以工作

        NSString *dateString = MD_history.addedOn;
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];
        NSDate *dateFromString = [[NSDate alloc] init];
        dateFromString = [df dateFromString:dateString];
        

        还有

        NSString *dateString = MD_history.addedOn;
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
        [df setLocale:usLocale];
        [df setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];
        NSDate *dateFromString = [[NSDate alloc] init];
        dateFromString = [df dateFromString:dateString];
        

        在这种情况下,插入数据库后的日期为“2014-07-30 02:13:20 +0000”格式。在这种日期列的排序中工作正常。

        【讨论】:

          猜你喜欢
          • 2017-06-28
          • 1970-01-01
          • 2021-05-08
          • 1970-01-01
          • 1970-01-01
          • 2023-01-10
          • 2015-05-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多