3

私は過去にSQLiteで少し遊んだことがありますが、新しいプロジェクトで使用したいほど気に入っています。

ステップ1はデータベースを作成することでありDateStamp、イベントが発生したときにタイムスタンプを配置するフィールドを作成する必要があります。

SQLiteドキュメントでは、日付と時刻のデータ型は次のように定義されています。

1。2日付と時刻のデータ型

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

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

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

日付をテキストとして保存したくはありません。WindowsのDateTimeオブジェクトは紀元前4714年11月24日に戻らないため、DateTime値をINTEGERとして格納する必要があると思いました。

では、DateTimeを整数として保存するにはどうすればよいですか?基準日TimeSpanと希望の日付の間を取得し、日数を抽出して保存しますか?

// is this a UTC date?
private static readonly DateTime utc1970_01_01 = new DateTime(1970, 1, 1);

public static double GetIntDate(DateTime dateTime) {
  // FYI: subtracting dates in .NET returns a time span object
  return (dateTime - nov24_4714bc).TotalSeconds;
}

そうですか?これは、SQLiteを使用する他のすべての人が行っていることですか?

また、SQLiteは日時をUTC時間で保存するため、その上で再度変換する必要があります。

確かに誰かが以前にこれをしたことがあります。これらの入力を処理する誰かがすでに作成したツールを見ていただければ幸いです。SQLiteにはいくつかの組み込み関数がありますが、それらの使用方法がよくわかりません。

解決済み:

うんち。

これほど簡単でしょうか?

public static long ToFileTimeUtc(DateTime dateTime) {
  return dateTime.ToFileTimeUtc();
}

public static DateTime FromFileTimeUtc(long fileTimeUtc) {
  return DateTime.FromFileTimeUtc(fileTimeUtc);
}

コメント?

できませんか?

4

2 に答える 2

1

FileTimeを使用できるかどうかは、アプリ以外のものがデータにアクセスするかどうかによって異なります。FileTimeは、1601年1月1日(UTC)以降の100ナノ秒間隔の数を表します。

そのため、値全体を格納するには、SQLLiteで整数が8バイト整数であることを確認する必要があります。

アプリがこのデータを処理する唯一のアプリであり、常にFileTimeを使用している限り、問題はありません。他の人がこのデータにアクセスし、FileTimeを理解でき、これが何であるかを認識している場合も、問題はありません。

于 2012-07-22T18:07:03.697 に答える
0

うんち。

これほど簡単でしょうか?

public static long ToFileTimeUtc(DateTime dateTime) {
  return dateTime.ToFileTimeUtc();
}

public static DateTime FromFileTimeUtc(long fileTimeUtc) {
  return DateTime.FromFileTimeUtc(fileTimeUtc);
}

コメント?

できませんか?

于 2012-07-22T17:59:16.810 に答える