Androidアプリを作成していますが、作成レコードの日付/時刻を保存する必要があります。ただし、SQLiteのドキュメントには、「SQLiteには日付や時刻を保存するためのストレージクラスがありません」と「日付、時刻をTEXT、REAL、またはINTEGER値として保存できる」とあります。
あるタイプを別のタイプよりも使用する技術的な理由はありますか?また、単一の列に、行から行への3つの形式のいずれかで日付を格納できますか?
後で日付を比較する必要があります。たとえば、私のアプリでは、日付Aから日付Bまでの間に作成されたすべてのレコードを表示します。真のDATETIME列がないと比較が難しくなるのではないかと心配です。
SQliteには特定の日時タイプはありません。必要に応じて、TEXT
、REAL
、またはINTEGER
タイプを使用できます。
SQLiteには、日付や時刻を保存するためのストレージクラスが用意されていません。代わりに、SQLiteの組み込みの日付と時刻関数は、日付と時刻をTEXT、REAL、またはINTEGER値として保存できます。
- ISO8601文字列としてのテキスト( "YYYY-MM-DD HH:MM:SS.SSS")。
- 紀元前4714年11月24日のグリニッジ標準時からのユリウス日数としてのREAL予後グレゴリオ暦によると。
- INTEGER、Unix時間、1970-01-01 00:00:00 UTCからの秒数。
アプリケーションは、これらの形式のいずれかで日付と時刻を保存し、組み込みの日付と時刻の関数を使用して形式間で自由に変換することを選択できます。
SQLiteの組み込みの日付および時刻関数は、 here にあります。
SQLiteには、日付や時刻を保存するためのストレージクラスが用意されていません。代わりに、SQLiteの組み込みの日付と時刻関数は、日付と時刻をTEXT、REAL、またはINTEGER値として保存できます。
ISO8601文字列としてのテキスト( "YYYY-MM-DD HH:MM:SS.SSS")。紀元前4714年11月24日のグリニッジ標準時からのユリウス日数としてのREAL予後グレゴリオ暦によると。 INTEGER、Unix時間、1970-01-01 00:00:00 UTCからの秒数。アプリケーションは、これらの形式のいずれかで日付と時刻を保存し、組み込みの日付と時刻の関数を使用して形式間で自由に変換することを選択できます。
そうは言っても、INTEGERを使用して、Unixエポック(1970-01-01 00:00:00 UTC)からの秒数を保存します。
SQLiteの強力な機能の1つは、ストレージタイプを選択できることです。 3つの異なる可能性のそれぞれの利点/欠点:
ISO8601ストリング
実数
整数
異なるタイプを比較したり、外部アプリケーションにエクスポートしたりする必要がある場合、必要に応じてSQLiteの 独自の日時変換関数 を自由に使用できます。
実質的にすべての日付と時刻の問題について、私は非常に単純なものを単純化することを好みます...整数で格納される秒まで。
整数は、データベース、フラットファイルなどの整数として常にサポートされます。ちょっとした計算をして別の型にキャストすると、いつでも日付をフォーマットできます。
このようにすることで、[現在のお気に入りデータベースをここに挿入]が、今日選択した日付形式を偶然使用しなかった[将来のお気に入りデータベース]に置き換えられても心配する必要はありません。
それはほんの少しの数学的なオーバーヘッドであり(例:メソッド-2秒かかります。必要に応じてGistを投稿します)、後で日付/時刻に関する多くの操作を簡素化します。
タイプlong
のフィールドに保存します。 Date.getTime()
およびnew Date(long)
を参照してください