字符串 '01/06/2015' 不是有效的 AllXsd 值

The string '01/06/2015' is not a valid AllXsd value

我遇到这个错误

The string '01/06/2015' is not a valid AllXsd value

我的XSD是:

<xs:element name="PassingDate">
                <xs:simpleType>
                <xs:restriction base="xs:date">
                <xs:pattern value="\d{2}[/]\d{2}[/]\d{4}"></xs:pattern>
                </xs:restriction>
                </xs:simpleType>
                </xs:element>

我正在将我的XML读入DataSet,然后我必须在PassingDate的基础上执行排序

如果我现在将PassingDate转换成数据类型日期,那么排序将只根据字符串进行。这将导致错误的输出。

如何格式化 dd/MM/yyyy 中的日期?

您的 PassingDate 声明不会重新排列日期的组成部分 -- 它只是进一步限制了这些组成部分在它们原来的位置。

您可以切换到纯正则表达式约束来接近:

<xs:element name="PassingDate">
  <xs:simpleType name="date">
    <xs:restriction base="xs:token">
      <xs:pattern value="[0-3][0-9]/[0-1][0-9]/[0-9]{4}" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>

备注:

  1. 此方法不能完全防止天数过多的无效日期 对于给定的月份,leap/non-leap 年等
  2. YYYY-MM-DD更利于国际交流
  3. YYYY-MM-DD 互操作性更好
  4. YYYY-MM-DD更适合排序。

建议:为您的 XML 使用标准 type="xs:date" 并仅本地化数据 entry/display 的日期格式。如果您受困于使用非标准日期格式的 XML,请调查 pre/post-processing 或编写自定义代码。您可能会从 here.

中得到一些想法