将 31-DEC-2016 转换为 2016-12-31 [英] Convert 31-DEC-2016 to 2016-12-31

查看:26
本文介绍了将 31-DEC-2016 转换为 2016-12-31的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在 XSLT 中使用 format-dateTime 函数将 31-DEC-2016 即 dd-mmm-yyyy 转换为 yyyy-mm-dd,但输出不符合预期.有人可以帮忙吗?

I want to convert the 31-DEC-2016 i.e., dd-mmm-yyyy to yyyy-mm-dd in the XSLT using format-dateTime function but the output is not as expected.Can anyone help on this?

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

我想获得这个特定事物的价值.2016 年 12 月 31 日:这是输入,我必须在代码中转换这里

I want to get the value for this particular thing.31-DEC-2016 : This is the input and i have to transform over here in the code

转换后,如何将值 T00:00:00 连接到日期??

Once that is converted, How to concat the the value T00:00:00 to the date??

推荐答案

您不能对不是有效日期时间(或 format-date() 函数对无效日期的字符串进行处理).您需要先使用字符串函数处理字符串.

You cannot use the format-dateTime() function on a string that is not a valid dateTime (or the format-date() function on a string that is not a valid date). You need to process the string using string functions first.

试试:

<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"调用此模板将返回值2016-12-31".

Calling this template with a datestring parameter of "31-DEC-2016" will return a value of "2016-12-31".

调用示例(主要是猜测,没有看到输入):

Example of call (mostly guessing, not having seen the input):

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

<小时><小时>

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



In XSLT 2.0, you can define a function instead of a named template. The following stylesheet:

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>

这篇关于将 31-DEC-2016 转换为 2016-12-31的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆