126

Android アプリを作成していて、作成記録の日時を保存する必要があります。ただし、SQLite のドキュメントには、「SQLite には、日付や時刻を保存するためのストレージ クラスが用意されていない」、「日付と時刻を TEXT、REAL、または INTEGER 値として保存できる」と記載されています。

あるタイプを別のタイプよりも使用する技術的な理由はありますか? また、1 つの列に 3 つの形式のいずれかで日付を行ごとに格納できますか?

後で日付を比較する必要があります。たとえば、私のアプリでは、日付 A から日付 B までの間に作成されたすべてのレコードを表示します。実際の DATETIME 列がないと比較が困難になるのではないかと心配しています。

4

5 に答える 5

91

SQLite には特定の日時型はありません。TEXTREALまたはINTEGERタイプのうち、必要に応じてどちらでも使用できます。

ドキュメントから直接

SQLite には、日付や時刻を格納するためのストレージ クラスが用意されていません。代わりに、SQLite の組み込みの日付と時刻関数は、日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。

  • ISO8601 文字列としての TEXT ("YYYY-MM-DD HH:MM:SS.SSS")。
  • ユリウス日としての REAL。先発グレゴリオ暦による紀元前 4714 年 11 月 24 日のグリニッジ正午からの日数。
  • UNIX 時間としての INTEGER、1970-01-01 00:00:00 UTC からの秒数。

アプリケーションは、これらの形式のいずれかで日付と時刻を保存することを選択し、組み込みの日付と時刻関数を使用して形式を自由に変換できます。

SQLite の組み込みの日付と時刻の関数は、ここにあります。

于 2013-06-21T03:23:07.713 に答える
20

SQLite には、日付や時刻を格納するためのストレージ クラスが用意されていません。代わりに、SQLite の組み込みの日付と時刻関数は、日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。

ISO8601 文字列としての TEXT ("YYYY-MM-DD HH:MM:SS.SSS")。ユリウス日としての REAL。先発グレゴリオ暦による紀元前 4714 年 11 月 24 日のグリニッジ正午からの日数。UNIX 時間としての INTEGER、1970-01-01 00:00:00 UTC からの秒数。アプリケーションは、これらの形式のいずれかで日付と時刻を保存することを選択し、組み込みの日付と時刻関数を使用して形式を自由に変換できます。

そうは言っても、INTEGERを使用し、Unix エポック (1970-01-01 00:00:00 UTC) からの秒数を格納します。

于 2013-06-21T03:21:59.337 に答える
7

type のフィールドに格納しlongます。見Date.getTime()て、new Date(long)

于 2013-06-21T03:15:49.577 に答える
7

事実上すべての日付と時刻の問題について、私は物事を単純化することを好みます。非常に単純です...整数に格納された秒まで。

整数は、データベースやフラット ファイルなどで常に整数としてサポートされます。少し計算して別の型にキャストすると、必要に応じて日付をフォーマットできます。

こうすれば、[現在のお気に入りのデータベースをここに挿入] が [将来のお気に入りのデータベース] に置き換えられたときに、偶然にも今日選択した日付形式を使用していないことを心配する必要はありません。

これはほんの少しの数学のオーバーヘッド (例: メソッド -- 2 秒かかります。必要に応じて要旨を投稿します) であり、後で日付/時刻に関する多くの操作を簡素化します。

于 2013-06-21T03:24:25.883 に答える