我真的很难在 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"];
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
). Use 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 问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)