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 Command Window

这是我在 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 回答