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