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

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

存储日期:

本文档告诉我使用下面指定的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. 对于你的日期字符串,你肯定不想使用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 日期和时间函数文档中所述。

     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问题。