air 读取sqlite的Date类型 解决方案

本文介绍了在Adobe Air和SQLite数据库间处理日期类型的挑战与解决方法。重点在于如何使用JulianDateFormat来确保日期的一致性和正确性,同时提供了一些实用的ActionScript代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自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)  +   " ') " ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值