1

私が取り組んでいるアプリでは、ユーザーは特定の日のログを作成できます。特定の日付範囲に基づいて情報を取り戻そうとしています。

テーブルを作成するコードは次のとおりです (この投稿のために簡略化しています)。

CREATE TABLE IF NOT EXISTS TimeLogged(
    ...
    LogDate DATE NOT NULL
);

テーブルに日付を挿入するために使用されるコードは次のとおりです。

INSERT INTO TimeLogged (LogDate) VALUES (date('2012-01-14'));

日付範囲を取得するために使用しているクエリは次のとおりです。

SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')

Sqlite コマンド ウィンドウから完全に動作します。私はあまりにも新しいので、pix を投稿するにはリンクがあります: Sqlite コマンド ウィンドウ

Flex/Flash Builder 4.6 で結果を取得するために使用するコードは次のとおりです。

            var stmt:SQLStatement = new SQLStatement();
            stmt.sqlConnection = SQLCom.SQLCon;
            stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')";
            try{
                stmt.execute();
            }
            catch(err:SQLError){
                trace(err.details);
            }

            var a:ArrayCollection = new ArrayCollection(stmt.getResult().data);

            trace("a.length: " + a.length);

            for(var i:int = 0; i < a.length; ++i)
                trace("a[" + i + "]: " + a[i].LogDate);

複数のレコードがあるにもかかわらず、結果が返されません。

WHERE/BETWEEN ステートメントを削除すると、コンソール出力に次のように表示されます。 Flex/Flash Builder コンソール出力

私の問題に光を当てることができる人に、事前に感謝します。

4

1 に答える 1

1

うまくいくものを見つけました。UTC 日をユリウス日に変換する関数を作成しました。

protected function UTCToJulianDay(d:Date):Number {
    return ((( d.time - (d.getTimezoneOffset() * 60000))  / 86400000) + 2440587.5);
}

次に、関数を使用して各日付オブジェクトを実行します。

var d:Date = new Date();
d.setTime(d.getTime() - (86400000 * 7));// first day is one week prior

var d1:Number = UTCToJulianDay(d);
var d2:Number = UTCToJulianDay(new Date());

したがって、日付オブジェクトは次のようにクエリに入ります (完全なコードについては、元の投稿を参照してください)。

stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN " + d1 + " AND " + d2;
于 2012-04-20T17:17:50.353 に答える