我真的很难在 Objective C 中比较 SQLite 查询中的日期。这就是我在做什么:
存储日期:
This document 告诉我使用下面指定的日期格式,但这似乎不对。我也尝试使用 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
。 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 问题。 关于ios - SQLite 存储、检索和比较 DATETIME 字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22115571/