【问题标题】:Minimum date for WDDXWDDX 的最短日期
【发布时间】:2014-07-11 22:50:23
【问题描述】:

我最近让一位用户输入了 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 中反序列化日期的最短日期是多少?

【问题讨论】:

  • 那个编码字符串是错误的。 AFAIK,它应该是ISO8601 格式,意思是四位数的年份。粗略的测试表明cfwddx 拒绝任何非四位数年份,即年份 9999。
  • 一匹马逃跑后,您是否关闭了那个特定的谷仓门?
  • 你为什么还要使用 WDDX?
  • 我必须维护一个非常旧的网络服务

标签: coldfusion coldfusion-9 wddx


【解决方案1】:

编辑:

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

SQL Server 将日期存储为 0204。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 将日期存储为 0204 不,sql server 不将日期存储为格式化字符串。在内部,它们存储为数字。暂时忽略验证,原因完全在 CF 方面。将该日期序列化为 wddx 字符串时,CF 无法生成ISO8601 所需的前导零。所以生成的字符串格式不正确,这就是反序列化失败的原因。 RE:如果有必要,我会好吧,既然那个日期范围对你的申请无效,你还是应该这样做。
    • 我想用你的评论作为答案,因为它比我自己的更完整和正确
    猜你喜欢
    • 2020-06-27
    • 2015-11-27
    • 1970-01-01
    • 2018-10-23
    • 2012-06-12
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多