我最近让一个用户输入了6/13/204的数据。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中反序列化日期的最低日期是多少?
发布于 2014-07-18 00:52:28
编辑:
要回答原来的问题,编码的字符串是错误的。序列化日期应该采用ISO8601格式,这意味着它们应该有四位数的年份。粗略的测试表明,cfwddx拒绝任何非四位数的年份,即年份< 1000或> 9999.
Server将日期存储为0204。
不,sql server不将日期存储为格式化字符串。在内部,它们被存储为数字。忽略验证片刻,原因是严格地在CF方面。当将该日期序列化为wddx字符串时,CF无法生成ISO8601所需的前导零。因此,生成的字符串204-6-13T0:0:0-8:0格式错误,这就是反序列化失败的原因。尽管如此,由于该日期范围对您的应用程序无效,您可能应该添加一些验证,以拒绝类似的无效值。
发布于 2014-07-12 21:19:06
Server将日期存储为0204。显然,ColdFusion将0204转换为204。如果用户开始经常这样做,我将为输入的数据添加一个额外的检查。如果有必要,我会
<cfif year(basecyledate) LT 1000>
...
</cfif>https://stackoverflow.com/questions/24707765
复制相似问题