Ios SQLite存储、检索和比较日期时间字段
我真的很难在Objective C中比较SQLite查询中的日期。下面是我正在做的: 存储日期: 告诉我使用下面指定的日期格式,但它似乎不正确。我尝试使用Ios SQLite存储、检索和比较日期时间字段,ios,objective-c,sqlite,datetime,comparison,Ios,Objective C,Sqlite,Datetime,Comparison,我真的很难在Objective C中比较SQLite查询中的日期。下面是我正在做的: 存储日期: 告诉我使用下面指定的日期格式,但它似乎不正确。我尝试使用yyyy-MM-dd hh:MM:ss,但也没有成功 NSDate *today = [NSDate date]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"YYYY-MM-DD HH:MM:SS"]; NS
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];
如上所示,您可能还希望指定区域设置
,以便日期格式不会因设备的本地化设置而改变不相关,但我假设您知道,在使用
stringWithFormat
构建SQL时应该谨慎。在这种情况下没有问题,但是如果使用任何用户输入,您应该将?
占位符与sqlite3\u bind\u text
一起使用,否则您将面临一系列问题。正确地执行sqlite3\u bind\u xxx
功能可能会很麻烦,但使用它也可以使您在与数据库交互时的生活更加轻松(它也完全解决了与日期相关的问题)。感谢您指出这一点。我一定会检查FMDB。我今天学到了很多:)像你建议的那样使用时间戳进行比较,效果很好。感谢您提供的关于使用日期格式的提示,非常有启发性!