将2016年12月31日转换为2016-12-31



我想使用格式datetime函数将XSLT中的dd-mmm-yyyy转换为yyyy-mm-dd,即dd-mmm-yyyy,但输出不符合预期。谁能为此提供帮助?

<ns1:QuoteDate>
          <xsl:value-of select='concat(xp20:format-dateTime(/Quote/QuoteHeader/QuoteDate,"[Y0001]-[M01]-[D01]"),"T00:00:00")'/>
        </ns1:QuoteDate>

我想获得此特定内容的值。31-dec-2016:这是输入,我必须在代码

中转换此处

转换后,如何将值t00:00:00限制到日期??

您不能在不是有效的dateTime的字符串上使用format-dateTime()函数(或在不是有效日期的字符串上的format-date()函数)。您需要首先使用字符串函数处理字符串。

尝试:

<xsl:template name="convertDate">
    <xsl:param name="datestring"/>
    <xsl:variable name="d" select="substring-before($datestring, '-')"/>
    <xsl:variable name="MMM" select="substring-before(substring-after($datestring, '-'), '-')"/>
    <xsl:variable name="m" select="string-length(substring-before('JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC', $MMM)) div 3 + 1"/>
    <xsl:variable name="y" select="substring-after(substring-after($datestring, '-'), '-')"/>
    <xsl:value-of select="$y"/>
    <xsl:value-of select="format-number($m, '-00')"/>
    <xsl:value-of select="format-number($d, '-00')"/>
</xsl:template>

使用" 31-Dec-2016"的Datestring参数调用此模板将返回" 2016-12-31"的值。


呼叫的示例(主要是猜测,没有看过输入):

<ns1:QuoteDate>
    <xsl:call-template name="convertDate">
        <xsl:with-param name="datestring" select="/Quote/QuoteHeader/QuoteDate"/>
    </xsl:call-template>
</ns1:QuoteDate>


在XSLT 2.0中,您可以定义一个函数而不是命名模板。以下样式表:

XSLT 2.0

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://www.example.com/my"
exclude-result-prefixes="xs my">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:function name="my:convertDate">
    <xsl:param name="string"/>
    <xsl:variable name="parts" select="tokenize($string, '-')"/>
    <xsl:variable name="m" select="index-of (('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'), $parts[2])"/>
    <xsl:sequence select="xs:date(concat($parts[3], format-number($m, '-00'), format-number(number($parts[1]), '-00')))" />
</xsl:function>
<xsl:template match="/">
    <result>
        <xsl:value-of select="my:convertDate('9-MAR-2016')"/>
    </result>
</xsl:template>
</xsl:stylesheet>

将返回:

<?xml version="1.0" encoding="utf-8"?>
<result>2016-03-09</result>

如果您仅格式化日期,我可以建议

格式日期(日期,格式)

也许这可以帮助您,

http://www.sixtree.com.au/articles/2013/formatting-dates-and-times-using-using-xslt-2.0-and-xpath/

相关内容

  • 没有找到相关文章

最新更新