我最近有一位用户输入了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中反序列化日期的最短日期是什么?
答案 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
格式不正确,这就是反序列化失败的原因。也就是说,由于该日期范围对您的应用程序无效,您应该添加一些验证来拒绝这样的无效值。