生成的 SQLite 数据库中的 NSDate 表示?
NSDate representation in generated SQLite database?
我在 DBAccess 框架中将 NSDate 用于 date/time 表示。但是,当我 运行 SQL 查询时
select date(start) from actions
我得到了一个奇怪的约会对象,而不是我的约会对象。甚至 DBAccess 查询也不起作用,例如:
DBResultSet *today = [[[Actions query] where:@"date(end) = date('now')"] fetch];
在 SQLite 中,列类型是正确的 - 时间戳。那么有什么方法可以正确处理日期/时间吗?
谢谢,
金德里奇
NSDate 存储为 EPOCH,任何 NSDate 对象在作为参数就位时都会进行转换。
因此您的查询将变为:
DBResultSet *today = [[[Actions query] whereWithFormat:@"end = %@", [NSDate date]] fetch];
显然,除非您存储并修剪日期中的秒数以便持久化或检索,否则这将不起作用。
需要变成:
DBResultSet *today = [[[Actions query] whereWithFormat:@"end >= %@ AND end <= %@", beginingOfDay, endOfDay] fetch];
我们可以向 SQLite 添加一个内部函数来帮助更好地支持这些,欢迎提出任何建议。最好只重载现有函数。
如果您想始终存储不带秒精度的 NSDate,您始终可以在 entityWillInsert 方法中添加一些内容并创建 NSDate 的扩展以提供一天的开始,
- (BOOL)entityWillInsert {
self.end = [self.end dateTrimmedToStartOfDay];
return YES;
}
这可能是保持所有代码简单的更简单方法。
谢谢
阿德里安
我最终使用 sqlite 函数结束,而不是像@Adrian_H 所建议的那样转换 NSDate。我今天的项目代码如下:
DBResultSet *today = [[[[Actions query] where:@"date(datetime(end, 'unixepoch', 'localtime')) = date('now')"] orderByDescending:@"id"] fetch];
此结果项,最终值为今天。
我在 DBAccess 框架中将 NSDate 用于 date/time 表示。但是,当我 运行 SQL 查询时
select date(start) from actions
我得到了一个奇怪的约会对象,而不是我的约会对象。甚至 DBAccess 查询也不起作用,例如:
DBResultSet *today = [[[Actions query] where:@"date(end) = date('now')"] fetch];
在 SQLite 中,列类型是正确的 - 时间戳。那么有什么方法可以正确处理日期/时间吗?
谢谢,
金德里奇
NSDate 存储为 EPOCH,任何 NSDate 对象在作为参数就位时都会进行转换。
因此您的查询将变为:
DBResultSet *today = [[[Actions query] whereWithFormat:@"end = %@", [NSDate date]] fetch];
显然,除非您存储并修剪日期中的秒数以便持久化或检索,否则这将不起作用。
需要变成:
DBResultSet *today = [[[Actions query] whereWithFormat:@"end >= %@ AND end <= %@", beginingOfDay, endOfDay] fetch];
我们可以向 SQLite 添加一个内部函数来帮助更好地支持这些,欢迎提出任何建议。最好只重载现有函数。
如果您想始终存储不带秒精度的 NSDate,您始终可以在 entityWillInsert 方法中添加一些内容并创建 NSDate 的扩展以提供一天的开始,
- (BOOL)entityWillInsert {
self.end = [self.end dateTrimmedToStartOfDay];
return YES;
}
这可能是保持所有代码简单的更简单方法。
谢谢 阿德里安
我最终使用 sqlite 函数结束,而不是像@Adrian_H 所建议的那样转换 NSDate。我今天的项目代码如下:
DBResultSet *today = [[[[Actions query] where:@"date(datetime(end, 'unixepoch', 'localtime')) = date('now')"] orderByDescending:@"id"] fetch];
此结果项,最终值为今天。