Xslt 在xsl中将dd/mm/yy转换为dd-mm-YYYY格式

Xslt 在xsl中将dd/mm/yy转换为dd-mm-YYYY格式,xslt,xslt-1.0,xslt-2.0,date-formatting,Xslt,Xslt 1.0,Xslt 2.0,Date Formatting,提前感谢您的支持 我的日期格式为dd/MMM/YY,需要使用XSL转换为另一种格式dd-MM-YYYY 这里的问题是,年份的短格式需要转换为长格式。如何确定年份 这里有几个例子 dd/MMM/YY - dd-MM-YYYY 01/FEB/91 - 01-02-1991. 13/APR/13 - 13-04-2013. 使用字符串操作,XSL可以将其转换为长格式,但无法确定实际年份 比如说 01/FEB/91可以使用字符串函数转换为01-02-1991或01-02-2091 因此,如何使用X

提前感谢您的支持

我的日期格式为
dd/MMM/YY
,需要使用
XSL
转换为另一种格式
dd-MM-YYYY

这里的问题是,年份的短格式需要转换为长格式。如何确定年份

这里有几个例子

dd/MMM/YY - dd-MM-YYYY

01/FEB/91 - 01-02-1991.

13/APR/13 - 13-04-2013.
使用字符串操作,
XSL
可以将其转换为长格式,但无法确定实际年份

比如说

01/FEB/91
可以使用字符串函数转换为
01-02-1991
01-02-2091


因此,如何使用XSL 1.0或XSL 2.0获取实际日期?

您需要考虑您的要求。XSLT无法知道01/FEB/91是指01-02-1991还是01-02-2091或01-02-1891。你需要决定截止年份在哪里

您可以在2013年完成截止,然后执行以下操作:

<xsl:variable name="longYear"
              select="$shortYear + 2000 - (100 * ($shortYear > 13))" />

这将导致20XX年小于或等于13年,19XX年大于13年

在其自己的模板中:

<xsl:template name="LongYear">
  <xsl:param name="shortYear" select="." />
  <xsl:param name="cutoff" select="13" />

  <xsl:value-of select="$shortYear + 2000 - (100 * ($shortYear > $cutoff))" />
</xsl:template>

您可以通过以下方式调用:

<xsl:call-template name="LongYear">
  <xsl:with-param name="shortYear" select="substring(Date, 8, 2)" />
</xsl:call-template>


您可以在xslt中使用定制的java函数,因为在java中同样可以进行日期转换。

这有帮助吗?我刚才编辑了我的问题。请查看。如何获取“实际日期”?只需在年前输入“20”,因为你不能回到过去…我所有的输入数据都与出生日期有关。对不起我的错误('actual'!='actuel'='current'法语)我在看的是,是否有任何内置函数/模式来执行你建议的操作。似乎没有,但将其放入自己的模板并使其可重用应该足够容易。在XSLT2.0中,您还可以定义一个函数来执行此操作,以便可以内联使用它。为了更通用,我对您的代码做了一些更改,不,您不能“在XSLT中使用自定义java函数”。您只能在那些XSLT处理器中使用Java函数,这些XSLT处理器允许您将Java函数用作扩展机制的一部分。