air 讀取sqlite的Date類型 解決方案

來源:互聯網
上載者:User

轉載請註明: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 在air和sqlite中有一些協助。 

         在處理 sqllite和air 互動中的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) + "')";

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.