zoukankan      html  css  js  c++  java
  • air 读取sqlite的Date类型 解决方案

    转载请注明:http://www.cnblogs.com/naiking/archive/2011/03/24/1994100.html#

    译自:http://verysimple.com/2008/09/09/working-with-dates-in-flex-air-and-sqlite/

    我承认我英语很烂

     

    来自air团队的Paul Robertson 写下sqlite中 类似Date类型的说明。将指导air自动处理date

    转换。我遇到的Date类型的问题主要是在 DataGrid 使用了日期控件dateField 下面的文章

    还是对处理Dates airsqlite中有一些帮助。 

             在处理 sqlliteair 交互中的date 值是很棘手的问题,会遇到各种未知的警告。

    困扰我的是:actionscript虽然内置了UTC 函数,且sqllite 也会恰当的插入到DATETME类型的列中。

    这看起来似乎一切都很正常。但是实际上sqllite不能识别类似DATE 的格式,仅仅是当作纯文本来处理。

    除非你打算应用一些date 格式化的 函数,跟踪sqlllite的返回结果,否则是你不会体会到这个的。

             Sqllite在数据完整性上是如此松散的:你可以随意的插入任何东西到任何数据类型的列中,

    这一切都不会发出警告。虽然Air 计算数值 基于Date的列,但是你会收到Invalid Date 错误,或者在更

    新时发生未知的错误。

             神奇的解决方案是:Julian Date Format ,他是sqllite air 都可以当作 Date识别的。

    奇怪的是actionscript居然没有内置转换Julian Dates的功能。

             在使用Date ,请遵循以下准则

    1:如果你在Air需要强类型的Date ,相关的Sqlite的列必须定义为 DATETIME 类型。有意思的是 DATETIME

        不是一个识别的sqllite 列的类型。他被认为是Numeric数值类型。

    2:当插入 或更新 DATETIME列时,你必须以Julian格式(or null)存储。Sqllite是接受很多一般的date格式的。

       请不要手动的在sqlite管理工具内录入日期,那不是Julian格式的。但是Air是对不同的格式执行效果也不同的。

             通过sql语句手动的插入一个Julian Date 使用:“%J

     

    UPDATE my_table SET my_column = STRFTIME('%J','2008-01-02 03:04:05');
    //参与运算也要注意 Julia 格式
    select * from USERS_Mood where RecordDate>STRFTIME('%J','2011-03-01') and RecordDate<STRFTIME('%J','2011-03-31') and User_ID= 'naiking'

    insert into USERS_Mood (User_ID,RecordDate,MoodValue,MoodInfo) values(
    'naiking',STRFTIME('%J','2011-03-20 03:04:05'),30,'nothing')

     

     

    as 使用Julian Dates

    public function lpad(original:Object, length:int, pad:String):String
    {
    var padded:String 
    = original == null ? "" : original.toString();
    while (padded.length < length) padded = pad + padded;
    return padded;
    }

    public function toSqlDate(dateVal:Date):String
    {
    return dateVal == null ? null : dateVal.fullYear
    + "-" + lpad(dateVal.month + 1,2,'0')  // month is zero-based
    + "-" + lpad(dateVal.date,2,'0')
    + " " + lpad(dateVal.hours,2,'0')
    + ":" + lpad(dateVal.minutes,2,'0')
    + ":" + lpad(dateVal.seconds,2,'0')
    ;
    }

    var myDate:Date 
    = new Date(2008,0,2,3,4,5); // Jan 02, 2008 03:04:05
    //也可以直接  var myDate=new Date();试试吧
    statement.text = "UPDATE my_table SET my_column = strftime('%J','" + toSqlDate(myDate) + "')";
  • 相关阅读:
    WCF寻址
    WCF之多个协定
    WCF之多个终结点
    WCF客户端和服务端配置
    VS2012新建项目出错:未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
    windows运行打开服务命令
    Android中 服务里的方法抽取成接口
    Android Studio 使用genymotion 模拟器运行app时 提示找不到任何设备
    SVN 首次用TortoiseSVN Checkout 提示Unexpected HTTP status 405
    jQuery EasyUI -onblu、onkeyup等事件
  • 原文地址:https://www.cnblogs.com/naiking/p/1994100.html
Copyright © 2011-2022 走看看