SQLite存储,检索和比较DATETIME字段

时间:2014-03-01 14:28:08

标签: ios objective-c sqlite datetime comparison

我真的很难在Objective C中比较SQLite查询中的日期。这就是我正在做的事情:

存储日期:

This document告诉我使用下面指定的dateformat,但它似乎不正确。我尝试使用yyyy-MM-dd hh:mm:ss但没有成功。

NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-DD HH:MM:SS"];
NSString *dateString=[dateFormat stringFromDate:today];

NSString *query = [NSString stringWithFormat: @"INSERT INTO user (edited) VALUES (\"%@\")", dateString];

比较日期

我正在使用时间戳,我将其转换为日期时间字符串

long stamp = [sessie integerForKey:@"stamp"];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-DD HH:MM:SS"];
NSString *dateString = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:stamp]];

sqlite3_stmt *result = [db selectQuery:[NSString stringWithFormat:@"SELECT * FROM user WHERE edited > '%@'", dateString]];

使用[[NSDate date] timeIntervalSince1970]生成时间戳。问题是查询不会给出正确的结果,我甚至不知道日期是否正确存储。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

有几点意见:

  1. 对于您的日期字符串,您绝对不想使用YYYY-MM-DD HH:MM:SS。这不会生成有效的日期字符串。使用yyyy-MM-dd hh:mm:ss更接近,但也不是很正确(因为您将使用12小时hh)。请改用yyyy-MM-dd HH:mm:ss

  2. 但是,这种日期格式不会捕获时区,因此,如果在SQLite数据库中存储日期字符串,则应使用UTC(GMT),如SQLite Date And Time Functions文档中所述。 / p>

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    NSString *dateString = [formatter stringFromDate:today];
    

    如上所示,您可能还想指定locale,以便日期格式不会因设备的本地化设置而改变。

  3. 请注意,您可以考虑使用timeIntervalSince1970将日期存储为数据库中的REAL值(而不是TEXT)。这可以更有效,并自动解决UTC问题。