我正在开发一个将数据保存到SQLite3数据库的iPhone应用程序。
对于我坚持的每一行,我希望包含“创建日期”和“上次修改日期”
我的问题是将这些信息存储在表格中的建议方法是什么?
属性在我的应用程序中表示为NSDate但我不确定如何在我的表中表示此信息。
似乎SQLite3提供了DATETIME类型,但对如何解析此信息没有本地的理解。
非常感谢任何帮助。
提前致谢。
答案 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)