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]
生成时间戳。 问题是查询不会给出正确的结果,我甚至不知道日期是否正确存储。 任何帮助将不胜感激!
几点意见:
-
对于你的日期字符串,你肯定不想使用
YYYY-MM-DD HH:MM:SS
。 这不会生成有效的日期字符串。 使用yyyy-MM-dd hh:mm:ss
更接近,但也不是很正确(因为你将使用12小时hh
)。 使用yyyy-MM-dd HH:mm:ss
代替。 -
但是,此日期格式不捕获时区,因此,如果在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
以便日期的格式不会根据设备的本地化设置而更改。 -
请注意,您可以考虑使用
timeIntervalSince1970
将日期作为REAL
值存储在数据库中(而不是TEXT
)。 这可以更高效并自动解决UTC问题。