我正在开发一个将数据保存到 SQLite3 数据库的 iPhone 应用程序。
对于我坚持的每一行,我希望包括一个“创建日期”和一个“最后修改日期”
我的问题是将这些信息存储在表格中的推荐方法是什么?
这些属性在我的应用程序中表示为 NSDate,但我不确定如何在我的表中表示此信息。
似乎 SQLite3 提供了 DATETIME 类型,但对如何解析此信息没有本机理解。
任何帮助将非常感激。
提前致谢。
我正在开发一个将数据保存到 SQLite3 数据库的 iPhone 应用程序。
对于我坚持的每一行,我希望包括一个“创建日期”和一个“最后修改日期”
我的问题是将这些信息存储在表格中的推荐方法是什么?
这些属性在我的应用程序中表示为 NSDate,但我不确定如何在我的表中表示此信息。
似乎 SQLite3 提供了 DATETIME 类型,但对如何解析此信息没有本机理解。
任何帮助将非常感激。
提前致谢。
我通常使用双精度,例如:
sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);
其中 dateObject 是一个 NSDate*。然后,当从数据库中获取数据时,使用
[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];
在 UNSIGNED INT 列中存储为典型的 C 时间(例如 time() 返回的 time_t/int 值)值。像用NSDate说的那样转换:
- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value
除了存储为整数,除非您需要亚秒级粒度(通常,对于 created-on/last-modified 来说,这是过大的)。无符号整数比双精度整数小得多,也更容易处理。虽然这在大多数桌面和 Web 应用程序中可能不再重要,但它肯定对 iPhone 有帮助。每一点都有帮助。
大多数人没有意识到的 C-times 的一个附带好处是它们与时区无关。如果您需要支持多个时区,这会派上用场。
我转换为/从 ISO8601 字符串:http ://en.wikipedia.org/wiki/ISO_8601
比时间间隔更具可读性/可破解性。
根据文档,没有 DATETIME 数据类型!我使用实数数据类型并使用timeIntervalSinceReferenceDate方法将 NSDate 转换为实数。