2

我最近有一个用户输入了 204 年 6 月 13 日的数据。SQL Server 2008 愉快地存储了日期。该日期后来被检索并序列化为 WDDX。它被编码为

<field name='BASECYCLEDATE'><dateTime>204-6-13T0:0:0-8:0</dateTime></field>

后来当我反序列化它时,我得到

 WDDX packet parse error at line 1, column 8772.. 

 Invalid date string 204-6-13T0:0:0-8:0.   

...

614 :   </cfscript>
615 :   
616 :   <cfwddx action = "wddx2cfml" input = "#qryLabel.Config#" output = "stDat">

我的问题是,在 WDDX 中反序列化日期的最短日期是多少?

4

2 回答 2

0

编辑:

要回答您的原始问题,该编码字符串是错误的。序列化日期应采用ISO8601格式,这意味着它们应该有四位数的年份。粗略的测试表明cfwddx拒绝任何非四位数年份,即年份 < 1000 或 > 9999。

SQL Server 将日期存储为 0204。

不,sql server 不会将日期存储为格式化字符串。在内部,它们存储为数字。暂时忽略验证,原因完全在 CF 方面。将该日期序列化为 wddx 字符串时,CF 无法生成 ISO8601 所需的前导零。所以生成的字符串204-6-13T0:0:0-8:0格式不正确,这就是反序列化失败的原因。也就是说,由于该日期范围对您的应用程序无效,因此您可能应该添加一些验证来拒绝类似的无效值。

于 2014-07-18T00:52:28.253 回答
0

SQL Server 将日期存储为 0204。显然 ColdFusion 将 0204 转换为 204。如果用户开始经常这样做,我将对传入的数据添加一个额外的检查。如果有必要,我会

 <cfif year(basecyledate) LT 1000>
     ...
 </cfif>
于 2014-07-12T21:19:06.090 回答