16

我正在开发一个将数据保存到 SQLite3 数据库的 iPhone 应用程序。

对于我坚持的每一行,我希望包括一个“创建日期”和一个“最后修改日期”

我的问题是将这些信息存储在表格中的推荐方法是什么?

这些属性在我的应用程序中表示为 NSDate,但我不确定如何在我的表中表示此信息。

似乎 SQLite3 提供了 DATETIME 类型,但对如何解析此信息没有本机理解。

任何帮助将非常感激。

提前致谢。

4

5 回答 5

21

我通常使用双精度,例如:

sqlite3_bind_double(statement, index, [dateObject timeIntervalSince1970]);

其中 dateObject 是一个 NSDate*。然后,当从数据库中获取数据时,使用

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];
于 2008-10-30T18:14:57.600 回答
9

在 UNSIGNED INT 列中存储为典型的 C 时间(例如 time() 返回的 time_t/int 值)值。像用NSDate说的那样转换:

- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value

除了存储为整数,除非您需要亚秒级粒度(通常,对于 created-on/last-modified 来说,这是过大的)。无符号整数比双精度整数小得多,也更容易处理。虽然这在大多数桌面和 Web 应用程序中可能不再重要,但它肯定对 iPhone 有帮助。每一点都有帮助。

大多数人没有意识到的 C-times 的一个附带好处是它们与时区无关。如果您需要支持多个时区,这会派上用场。

于 2008-10-30T19:12:30.620 回答
8

我转换为/从 ISO8601 字符串:http ://en.wikipedia.org/wiki/ISO_8601

比时间间隔更具可读性/可破解性。

于 2008-10-30T22:06:55.263 回答
2

根据文档,没有 DATETIME 数据类型!我使用实数数据类型并使用timeIntervalSinceReferenceDate方法将 NSDate 转换为实数。

于 2008-10-30T18:14:40.253 回答
0

如何使用 Objective C 在 SQLite 中获取日期时间列

于 2009-11-10T22:29:00.180 回答