代码之家  ›  专栏  ›  技术社区  ›  Jordan

iPhone SQLite日期问题

  •  3
  • Jordan  · 技术社区  · 16 年前

    "create table if not exists data (pkey integer primary key, doc date)"
    
    [db executeUpdate:@"insert into data ( doc) values (?)" , [NSDate date]];
    
    "select * FROM data WHERE doc between '2009-08-23' and '2009-08-23' "
    
    3 回复  |  直到 16 年前
        1
  •  10
  •   Mark Rushakoff    16 年前

    between '2009-08-23' and '2009-08-23'

    如果您希望项目恰好发生在2009-08-23,请选择 between '2009-08-23' and '2009-08-24' 从23日午夜到24日午夜。

    sqlite> CREATE TABLE t (d DATETIME);
    sqlite> SELECT DATETIME('now');
    2009-08-24 02:32:20
    sqlite> INSERT INTO t VALUES (datetime('now'));
    sqlite> SELECT * FROM t;
    2009-08-24 02:33:42
    sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-24';
    sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-25';
    2009-08-24 02:33:42
    
        2
  •  2
  •   paulthenerd    16 年前

    在我的例子中,我将时间戳以这种时间戳格式存储在sqlite中:“yyyy-MM-dd HH:MM:ss.SSSS”。此示例使用当前日期([NSDate-date])。

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
    NSDate *startOfDay = [dateFormatter dateFromString:dateString];  
    // add a full day and subtract 1 second to get the end of day timestamp
    NSDate *endOfDay = [startOfDay addTimeInterval:(60*60*24)-1];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSS"];
    

    然后,您可以对查询值使用startOfDay和endOfDay。

        3
  •  1
  •   Marian    16 年前

    SQLite进行字符串比较,而不是日期比较。

    因此,解决问题的一种方法是:

    推荐文章