Порядковый перевод даты в формат ММ / ДД / ГГГГ - PullRequest
1 голос
/ 02 августа 2011

Мне нужно преобразовать порядковые даты, например 2011001 (1 января 2011 г.), в формат MM / dd / yyyy (01.01.2011). XSLT 2.0 в порядке.

Возможно, я не правильно спросил; Я не уверен, какая дополнительная информация понадобится, чтобы помочь решить эту проблему. Дайте мне знать, и я предоставлю любую необходимую информацию. Любые решения или указатели приветствуются.

1 Ответ

3 голосов
/ 05 октября 2011

Это будет работать в XSLT 2.0:

<xsl:template match="date">
  <xsl:copy>
     <xsl:analyze-string select="." regex="([0-9]{{4}})([0-9]{{3}})">
       <xsl:matching-substring>
         <xsl:variable name="jan1" as="xs:date" select="xs:date(fn:concat(fn:regex-group(1),'-01-01'))"/>
         <xsl:variable name="offset" as="xs:dayTimeDuration" select="xs:dayTimeDuration(fn:concat('P',number(fn:regex-group(2))-1,'D'))"/>
         <xsl:value-of select="format-date($jan1+$offset, '[M,2]/[D,2]/[Y]')"/>
       </xsl:matching-substring>
       <xsl:non-matching-substring>
         <xsl:value-of select="."/>
       </xsl:non-matching-substring>
     </xsl:analyze-string>
   </xsl:copy>
</xsl:template>

Секрет в том, чтобы использовать порядковый номер как смещение от 1 января поставляемого года. Затем формат-дата может выводить дату в любом формате, который вы хотите.

Вы можете использовать substring () вместо xsl: analysis-string, но этот способ позволяет вам убедиться, что вы пытаетесь конвертировать даты только в правильном формате.

...