16

SQLite3 データベースにデータを永続化する iPhone アプリケーションを開発しています。

永続化する行ごとに、「作成日」と「最終更新日」を含めたい

私の質問は、この情報をテーブルに格納するための推奨されるアプローチは何ですか?

プロパティはアプリケーションで NSDate として表されますが、テーブルでこの情報を表す方法がわかりません。

SQLite3 は DATETIME 型を提供しているようですが、この情報を解析する方法をネイティブに理解していません。

どんな助けでも大歓迎です。

前もって感謝します。

4

5 に答える 5

21

私は通常、次のような double を使用します。

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

ここで、dateObject は NSDate* です。次に、DBからデータを取得するときに、

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

UNSIGNED INT 列に典型的な C-time (たとえば、time() によって返される time_t/int 値) の値として格納します。drawh がNSDateで言ったように変換します。

- timeIntervalSince1970
- dateWithTimeIntervalSince1970:(double)value

1 秒未満の粒度が必要な場合を除き、整数として保存することを除きます (通常、作成日/最終変更日ではやり過ぎです)。unsigned int は double よりもはるかに小さく、処理が簡単です。これは、ほとんどのデスクトップ アプリケーションや Web アプリケーションではもはや問題にならないかもしれませんが、iPhone では確かに役立ちます。少しずつ役に立ちます。

ほとんどの人が気付いていない C-times の副次的な利点の 1 つは、タイムゾーンに依存しないことです。複数のタイムゾーンをサポートする必要がある場合、これは便利です。

于 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

ObjectiveCでSQLiteの日時列を取得する方法

于 2009-11-10T22:29:00.180 に答える