在iPhone应用程序中将日期持久化到SQLite3

时间:2008-10-30 18:03:30

标签: iphone cocoa-touch sqlite

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

对于我坚持的每一行,我希望包含“创建日期”和“上次修改日期”

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

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

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

非常感谢任何帮助。

提前致谢。

5 个答案:

答案 0 :(得分:21)

我通常使用双,类似:

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

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

[NSDate dateWithTimeIntervalSince1970:doubleValueFromDatabase];

答案 1 :(得分:9)

存储为UNSIGNED INT列中的典型C时间(例如time()返回的time_t / int值)。使用NSDate转换为 drewh

- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value

除非作为整数存储,否则除非您需要亚秒级粒度(通常,对于创建/最后修改,它是过度杀伤)。无符号整数比双精度更小,更容易处理。虽然这在大多数桌面和Web应用程序中可能无关紧要,但它确实对iPhone有所帮助。每一点都有帮助。

C-times的一个好处是大多数人没有意识到他们是时区不可知的。如果你需要支持多个时区,这就派上用场了。

答案 2 :(得分:8)

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

比时间间隔更具可读性/可攻击性。

答案 3 :(得分:2)

According to the docs没有DATETIME数据类型!我使用真实的数据类型,并使用 timeIntervalSinceReferenceDate 方法将NSDate转换为 real

答案 4 :(得分:0)