yyyy-mm-dd格式的日期不会抛出错误

时间:2015-01-09 22:37:28

标签: xml date xquery osb bea

这可能看起来很奇怪,但是我看到,在将字符串转换为日期时,值20155-10-10没有抛出错误说明无效日期。

使用的功能如下

fn-bea:date-from-string-with-format("MM/dd/yyyy",'10/10/20155')

以上函数返回日期20155-10-10,当上面的字符串被传递并且也被模式验证。该字段声明为xs:date

类型

该功能的原型是

fn-bea:date-from-string-with-format($format as xs:string?, $dateString as xs:string?) as xs:date?

请点击链接http://docs.oracle.com/cd/E13167_01/aldsp/docs25/xquery/extensions.html#wp1297249了解功能使用情况和示例

1 个答案:

答案 0 :(得分:4)

这是预期和记录在案的行为,尽管令人惊讶。

OSB日期模式

Oracle documentation on fn-bea:date-from-string-with-format(...)包含有关日期模式的以下注释(由我添加突出显示):

  

您可以使用标准Java类符号构建日期和时间模式。 [...]重复每个符号以匹配所需的最大字符数来表示实际值。 [...]

因此,OSB使用默认的Java日期模式,而YYYY将日期设置为要求至少四位数年份声明,但允许任意更长的日期。例如,MM/dd/yyyy匹配23/02/201423/02/20155;但不是23/02/42

Java日期模式

查看Java specifications以验证这一点,即使是最后一个日期(第42年)也是允许的:

  

对于解析,如果模式字母的数量大于2,则无论数字位数如何,都按字面解释年份。所以使用模式" MM / dd / yyyy"," 01/11/12"解析到1月11日,12 A.D。

可能是OSB将自己的解析规则与Java日期类符号一起使用。


我没有验证OSB使用哪一个,但两个规范允许YYYY五位数。