Минимальная дата для WDDX

Недавно я попросил пользователя ввести данные от 13.06.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 ответа

Решение

Редактировать:

Чтобы ответить на ваш первоначальный вопрос, эта закодированная строка неверна. Сериализованные даты должны быть в формате ISO8601, то есть они должны иметь четыре цифры года. Беглый тест предполагает cfwddx отклоняет любые не состоящие из четырех цифр годы, т.е. годы < 1000 или> 9999.

SQL Server хранит дату как 0204.

Нет, сервер SQL не хранит даты в виде форматированных строк. Внутри они хранятся в виде чисел. Игнорирование проверки на мгновение, причина строго на стороне CF. При сериализации этой даты в строку wddx CF не может сгенерировать начальный ноль, требуемый ISO8601. Таким образом, полученная строка 204-6-13T0:0:0-8:0 неправильно сформирован, и именно поэтому десериализация терпит неудачу. Тем не менее, поскольку этот диапазон дат недопустим для вашего приложения, вам, вероятно, следует добавить некоторую проверку, чтобы отклонить недопустимые значения, подобные этому.

SQL Server хранит дату как 0204. Очевидно, ColdFusion преобразует 0204 в 204. Если пользователи начнут делать это часто, я добавлю дополнительную проверку поступающих данных. При необходимости я буду

 <cfif year(basecyledate) LT 1000>
     ...
 </cfif>
Другие вопросы по тегам