Преобразовать формат даты из дд / мм / гггг в гггг-мм-дд с помощью xsl - PullRequest
0 голосов
/ 30 мая 2019

Впервые я использую XSLT.Мне нужно конвертировать дату из дд / мм / гггг в гггг-мм-дд.Ниже приведены мои коды.

<xsl:element name="transactionDate">
                                <xsl:value-of select="concat(substring(col26,5,5), '-', substring(col26,3,1), '-', substring(col26,1,1))"/>
            </xsl:element>

В приведенном выше коде я могу преобразовать дату из дд / мм / гггг в гггг-мм-дд, но когда дата стала двузначной, то она не работает.

Может кто-нибудь предложить, пожалуйста.

Спасибо заранее.

1 Ответ

2 голосов
/ 30 мая 2019

Если col26 содержит дату в формате dd/mm/yyyy, то ваше выражение должно быть:

<xsl:value-of select="concat(substring(col26, 7, 4), '-', substring(col26, 4, 2), '-', substring(col26, 1, 2))"/>

Не уверен, что вы подразумеваете под "когда дата стала двузначной". Выше предполагается, что дни и месяцы на входе дополнены нулями до 2 цифр каждый. В противном случае формат не dd/mm/yyyy.


Добавлено:

если дата наступает как 4/4/2019, тогда (мой код) работает нормально

Если дата может быть 2/4/2019, тогда ваш формат d/m/y, а не dd/mm/yyyy. Чтобы преобразовать его в yyyy-mm-dd, попробуйте:

<transactionDate>
    <xsl:variable name="d" select="substring-before(col26, '/')" />
    <xsl:variable name="m" select="substring-before(substring-after(col26, '/'), '/')" />
    <xsl:variable name="y" select="substring-after(substring-after(col26, '/'), '/')" />

    <xsl:value-of select="format-number($y, '0000')" />
    <xsl:value-of select="format-number($m, '-00')" />
    <xsl:value-of select="format-number($d, '-00')" />
</transactionDate>

Добавлено # 2:

извините, что сообщаю вам, что в поле даты значение "20/12/2019 9:24:00 AM", время также приходит в CSV

К сожалению, вы не раскрыли эту информацию раньше.

Если ваш формат ввода d/m/y h:mm:ss xm, используйте:

<transactionDate>
    <xsl:variable name="date" select="substring-before(col26, ' ')" />

    <xsl:variable name="d" select="substring-before($date, '/')" />
    <xsl:variable name="m" select="substring-before(substring-after($date, '/'), '/')" />
    <xsl:variable name="y" select="substring-after(substring-after($date, '/'), '/')" />

    <xsl:value-of select="format-number($y, '0000')" />
    <xsl:value-of select="format-number($m, '-00')" />
    <xsl:value-of select="format-number($d, '-00')" />
</transactionDate>

Демо : https://xsltfiddle.liberty -development.net / pPzifpU

...