WDDX的最短日期

时间:2014-07-11 22:50:24

标签: coldfusion coldfusion-9 wddx

我最近有一位用户输入了6/13/204的数据。 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中反序列化日期的最短日期是什么?

2 个答案:

答案 0 :(得分:0)

SQL Server将日期存储为0204.显然,ColdFusion会将0204转换为204.如果用户经常开始执行此操作,我将对进入的数据添加额外的检查。如有必要,我将

 <cfif year(basecyledate) LT 1000>
     ...
 </cfif>

答案 1 :(得分:0)

修改

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

  

SQL Server将日期存储为0204。

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