Преобразование дд/мм/гг в формат дд-мм-гггг в xsl

Заранее спасибо за вашу поддержку.

У меня есть форматы даты как dd/MMM/YY, и их нужно преобразовать в другой формат dd-MM-YYYY с помощью XSL.

Проблема здесь в том, что год в коротком формате необходимо преобразовать в длинный формат. Как можно определить год?

Вот несколько примеров,

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 or XSL 2.0?


person Hari    schedule 16.07.2013    source источник
comment
Это помогает? stackoverflow.com/ вопросы/16892344/   -  person cianius    schedule 16.07.2013
comment
Я только что отредактировал свой вопрос. Пожалуйста, просмотрите.   -  person Hari    schedule 16.07.2013
comment
как получить актуальную дату? просто объедините 20 до года, так как вы не можете вернуться в прошлое ...   -  person skoll    schedule 16.07.2013
comment
Все входные данные, которые у меня есть, связаны с датой рождения.   -  person Hari    schedule 16.07.2013
comment
Извините за ошибку («фактический» != «actuel» = «текущий» на французском языке)   -  person skoll    schedule 16.07.2013


Ответы (2)


Вы должны думать о том, что вы спрашиваете. 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>
person JLRishe    schedule 16.07.2013
comment
Что я искал, есть ли встроенная функция/шаблон для выполнения операции, которую вы предложили. - person Hari; 16.07.2013
comment
Кажется, нет, но должно быть достаточно просто поместить это в свой собственный шаблон и сделать его многоразовым. В XSLT 2.0 вы также можете определить функцию, которая делает это, чтобы вы могли использовать ее как встроенную. - person JLRishe; 17.07.2013
comment
Чтобы быть более общим, я немного изменил ваш код, ‹xsl:template name=LongYear› ‹xsl:param name=shortYear select=. /› ‹xsl:value-of select=$shortYear + 2000 - (100 * ($shortYear › (последние две цифры текущего года)) /› ‹/xsl:template› - person Hari; 17.07.2013

Вы можете использовать настраиваемую функцию Java в xslt, поскольку это преобразование даты возможно в Java для того же самого.

person Deepika    schedule 06.02.2015
comment
Нет, вы не можете использовать настраиваемую функцию Java в xslt. Вы можете использовать функции Java только в тех процессорах XSLT, которые позволят вам использовать их как часть их механизма расширений. - person michael.hor257k; 06.02.2015